एक अलग R फ़ाइल में सामान्य कोड को फैक्टर करें, और फिर उस Rm फ़ाइल को उस फ़ाइल में स्रोत करें जिसे आप चाहते हैं।
इसलिए उदाहरण के लिए मान लें कि मेरे पास दो रिपोर्ट हैं जिन्हें मुझे बनाने की आवश्यकता है, फ्लू का प्रकोप और बंदूकें बनाम मक्खन विश्लेषण। स्वाभाविक रूप से मैं दो Rmd दस्तावेज़ बनाऊँगा और उसके साथ काम करूँगा।
अब मान लीजिए बॉस साथ आता है और फ्लू के प्रकोपों बनाम मक्खन की कीमतों (9 मिमी बारूद के लिए नियंत्रण) की विविधताओं को देखना चाहता है।
- नई रिपोर्ट में रिपोर्ट का विश्लेषण करने के लिए कोड को कॉपी और पेस्ट करना कोड के पुन: उपयोग के लिए एक बुरा विचार है, आदि।
- मैं चाहता हूं कि यह अच्छा लगे।
मेरा समाधान परियोजना को इन फाइलों में शामिल करना था:
- Flu.Rmd
- Guns_N_Butter.Rmd
- guns_data_import.R
- butter_data_import.R
प्रत्येक Rmd फ़ाइल के भीतर मुझे कुछ ऐसा चाहिए:
```{r include=FALSE}
source('flu_data_import.R')
```
यहाँ समस्या यह है कि हम प्रजनन क्षमता खो देते हैं। मेरा समाधान यह है कि प्रत्येक Rmd फ़ाइल में शामिल करने के लिए एक सामान्य चाइल्ड डॉक्यूमेंट बनाया जाए। इसलिए मेरे द्वारा बनाई गई प्रत्येक Rmd फ़ाइल के अंत में, मैं इसे जोड़ता हूं:
```{r autodoc, child='autodoc.Rmd', eval=TRUE}
```
और, ज़ाहिर है, ऑटोडोक.मॉड:
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))
}
}
}
}
```
```{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>
नायब, यह Rmd -> html वर्कफ़्लो के लिए डिज़ाइन किया गया है। यदि आप लेटेक्स या किसी अन्य चीज़ के साथ जाते हैं तो यह एक बदसूरत गड़बड़ होगी। यह Rmd दस्तावेज़ सभी स्रोत () एड फ़ाइलों के लिए वैश्विक वातावरण के माध्यम से दिखता है और आपके दस्तावेज़ के अंत में उनके स्रोत को शामिल करता है। इसमें jquery ui, तालिकाओं को शामिल किया गया है, और दस्तावेज़ को सेट की गई फ़ाइलों को दिखाने / छिपाने के लिए एक अकॉर्डियन शैली का उपयोग करने के लिए सेट किया गया है। यह प्रगति पर काम है, लेकिन इसे अपने स्वयं के उपयोग के लिए स्वतंत्र महसूस करें।
एक-लाइनर नहीं, मुझे पता है। आशा है कि यह आपको कम से कम कुछ विचार देता है :)
Rmd
फ़ाइल में अन्य आर स्क्रिप्ट को स्रोत कर सकते हैं । लेकिन आप भी अन्यmarkdown
फाइलों में एक फाइल को बुना हुआ होना चाहते हैं?