Faktorkan kode umum ke dalam file R terpisah, lalu sumber file R tersebut ke dalam setiap file Rmd yang Anda inginkan.
jadi misalnya saya punya dua laporan yang harus saya buat, Wabah Flu dan Analisis Senjata vs Mentega. Secara alami saya akan membuat dua dokumen Rmd dan selesai dengannya.
Sekarang misalkan bos datang dan ingin melihat variasi harga Wabah Flu versus Mentega (mengendalikan amunisi 9mm).
- Menyalin dan menempelkan kode untuk menganalisis laporan ke dalam laporan baru adalah ide yang buruk untuk menggunakan kembali kode, dll.
- Saya ingin terlihat bagus.
Solusi saya adalah memfaktorkan proyek ke dalam file-file ini:
- Flu.Rmd
- Guns_N_Butter.Rmd
- senjata_data_import.R
- butter_data_import.R
dalam setiap file Rmd saya akan memiliki sesuatu seperti:
```{r include=FALSE}
source('flu_data_import.R')
```
Masalahnya di sini adalah kita kehilangan reproduktifitas. Solusi saya untuk itu adalah dengan membuat dokumen anak umum untuk disertakan ke dalam setiap file Rmd. Jadi di akhir setiap file Rmd yang saya buat, saya menambahkan ini:
```{r autodoc, child='autodoc.Rmd', eval=TRUE}
```
Dan, tentu saja, autodoc.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))
}
}
}
}
```
```{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>
NB, ini dirancang untuk alur kerja Rmd -> html. Ini akan menjadi kekacauan yang buruk jika Anda menggunakan lateks atau apa pun. Dokumen Rmd ini memeriksa lingkungan global untuk semua file source () dan menyertakan sumbernya di akhir dokumen Anda. Ini termasuk jquery ui, tablesorter, dan mengatur dokumen untuk menggunakan gaya akordeon untuk menampilkan / menyembunyikan file bersumber. Ini sedang dalam proses, tetapi jangan ragu untuk menyesuaikannya dengan penggunaan Anda sendiri.
Bukan satu kalimat, saya tahu. Semoga ini memberi Anda beberapa ide setidaknya :)
Rmd
file. Tetapi Anda juga ingin membuat sumber dimarkdown
file lain menjadi file yang dirajut?