फैक्टर एक अलग आर फ़ाइल में आम कोड बाहर, और फिर स्रोत प्रत्येक आरएमडी में है कि आर फ़ाइल फ़ाइल में यह चाहते हैं।
तो उदाहरण के लिए मान लीजिए कि मैं दो रिपोर्टों मैं बनाने के लिए, फ्लू फैलने की जरूरत है चलो और बंदूक बनाम मक्खन विश्लेषण। स्वाभाविक रूप से मैं दो आरएमडी दस्तावेज तैयार करता हूं और इसके साथ किया जाता हूं।
अब मान लीजिए कि बॉस साथ आता है और फ्लू आउटब्रेक्स बनाम मक्खन की कीमतों (9 मिमी बारूद के लिए नियंत्रित) की विविधताओं को देखना चाहता है।
- कोड को कॉपी करके चिपकाने नई रिपोर्ट में रिपोर्ट का विश्लेषण करने के आदि कोड पुनः उपयोग के लिए एक बुरा विचार,
- मैं इसे अच्छे लग रहे करना चाहते हैं।
प्रत्येक RMD फ़ाइल मैं की तरह कुछ होगा भीतर
:
```{r include=FALSE}
source('flu_data_import.R')
```
समस्या यहाँ है कि हम reproducibility खो देते हैं। इसका मेरा समाधान प्रत्येक आरएमडी फ़ाइल में शामिल करने के लिए एक सामान्य बाल दस्तावेज़ बनाना है। निश्चित रूप से
```{r autodoc, child='autodoc.Rmd', eval=TRUE}
```
और,, autodoc.Rmd:: तो हर RMD फ़ाइल मैं बनाने के अंत में, मैं इस जोड़ने
Source Data & Code
----------------------------
<div id="accordion-start"></div>
```{r sourcedata, echo=FALSE, results='asis', warnings=FALSE}
if(!exists(autodoc.skip.df)) {
autodoc.skip.df <- list()
}
#Generate the following table:
for (i in ls(.GlobalEnv)) {
if(!i %in% autodoc.skip.df) {
itm <- tryCatch(get(i), error=function(e) NA)
if(typeof(itm)=="list") {
if(is.data.frame(itm)) {
cat(sprintf("### %s\n", i))
print(xtable(itm), type="html", include.rownames=FALSE, html.table.attributes=sprintf("class='exportable' id='%s'", i))
}
}
}
}
```
### Source Code
```{r allsource, echo=FALSE, results='asis', warning=FALSE, cache=FALSE}
fns <- unique(c(compact(llply(.data=llply(.data=ls(all.names=TRUE), .fun=function(x) {a<-get(x); c(normalizePath(getSrcDirectory(a)),getSrcFilename(a))}), .fun=function(x) { if(length(x)>0) { x } })), llply(names(sourced), function(x) c(normalizePath(dirname(x)), basename(x)))))
for (itm in fns) {
cat(sprintf("#### %s\n", itm[2]))
cat("\n```{r eval=FALSE}\n")
cat(paste(tryCatch(readLines(file.path(itm[1], itm[2])), error=function(e) sprintf("Could not read source file named %s", file.path(itm[1], itm[2]))), sep="\n", collapse="\n"))
cat("\n```\n")
}
```
<div id="accordion-stop"></div>
<script type="text/javascript">
```{r jqueryinclude, echo=FALSE, results='asis', warning=FALSE}
cat(readLines(url("http://code.jquery.com/jquery-1.9.1.min.js")), sep="\n")
```
</script>
<script type="text/javascript">
```{r tablesorterinclude, echo=FALSE, results='asis', warning=FALSE}
cat(readLines(url("http://tablesorter.com/__jquery.tablesorter.js")), sep="\n")
```
</script>
<script type="text/javascript">
```{r jqueryuiinclude, echo=FALSE, results='asis', warning=FALSE}
cat(readLines(url("http://code.jquery.com/ui/1.10.2/jquery-ui.min.js")), sep="\n")
```
</script>
<script type="text/javascript">
```{r table2csvinclude, echo=FALSE, results='asis', warning=FALSE}
cat(readLines(file.path(jspath, "table2csv.js")), sep="\n")
```
</script>
<script type="text/javascript">
$(document).ready(function() {
$('tr').has('th').wrap('<thead></thead>');
$('table').each(function() { $('thead', this).prependTo(this); });
$('table').addClass('tablesorter');$('table').tablesorter();});
//need to put this before the accordion stuff because the panels being hidden makes table2csv return null data
$('table.exportable').each(function() {$(this).after('<a download="' + $(this).attr('id') + '.csv" href="data:application/csv;charset=utf-8,'+encodeURIComponent($(this).table2CSV({delivery:'value'}))+'">Download '+$(this).attr('id')+'</a>')});
$('#accordion-start').nextUntil('#accordion-stop').wrapAll("<div id='accordion'></div>");
$('#accordion > h3').each(function() { $(this).nextUntil('h3').wrapAll("<div>"); });
$('#accordion').accordion({ heightStyle: "content", collapsible: true, active: false });
</script>
एनबी, इस आरएमडी के लिए डिज़ाइन किया गया है -> एचटीएमएल कार्यप्रवाह । यदि आप लेटेक्स या किसी और चीज के साथ जाते हैं तो यह एक बदसूरत गड़बड़ होगी। यह आरएमडी दस्तावेज सभी स्रोत() 'ed फ़ाइलों के लिए वैश्विक वातावरण को देखता है और आपके दस्तावेज़ के अंत में उनके स्रोत को शामिल करता है। इसमें jquery ui, टेबललेटर शामिल है, और दस्तावेज़ को सोर्स की गई फ़ाइलों को दिखाने/छिपाने के लिए एक accordion शैली का उपयोग करने के लिए सेट करता है। यह एक काम प्रगति पर है, लेकिन इसे अपने स्वयं के उपयोगों में अनुकूलित करने के लिए स्वतंत्र महसूस करें।
एक लाइनर नहीं, मुझे पता है। उम्मीद है कि यह आपको कम से कम कुछ विचार देता है :)
मैं वास्तव में एक बहुत कठिन समय अपने प्रश्न (मैं इसे कई बार पढ़ा) समझ आ रही है। आप अन्य आर स्क्रिप्ट को आसानी से 'आरएमडी' फाइल में स्रोत कर सकते हैं। लेकिन आप बुनाई वाली फाइल में अन्य 'मार्कडाउन' फ़ाइलों में भी स्रोत बनाना चाहते हैं? – Maiasaura
मैं आर मार्कडाउन फ़ाइलों (यानी, * .rmd) में आर कोड भाग के अंदर आर कोड को स्रोत करना चाहता हूं? मैंने चीजों को स्पष्ट करने की कोशिश करने के लिए प्रश्न को थोड़ा सा संपादित किया है। –
लेटेक्स में 'शामिल' की रेखाओं के साथ कुछ। यदि मार्कडाउन अन्य मार्कडाउन दस्तावेज़ों को शामिल करने का समर्थन करता है, तो ऐसा फ़ंक्शन बनाने के लिए अपेक्षाकृत आसान होना चाहिए। –