Phân loại mã chung thành một tệp R riêng biệt, rồi nguồn tệp R đó vào mỗi tệp Rmd mà bạn muốn.
vì vậy, ví dụ, giả sử tôi có hai báo cáo cần thực hiện, Dịch cúm và Phân tích Súng vs Bơ. Đương nhiên, tôi sẽ tạo hai tài liệu Rmd và được thực hiện với nó.
Bây giờ, giả sử sếp đi cùng và muốn xem các biến thể của Dịch cúm so với giá Bơ (kiểm soát đạn 9mm).
- Sao chép và dán mã để phân tích báo cáo vào báo cáo mới là một ý tưởng tồi cho việc sử dụng lại mã, v.v.
- Tôi muốn nó trông đẹp.
Giải pháp của tôi là đưa dự án vào các tệp sau:
- Flu.Rmd
- Guns_N_Butter.Rmd
- gun_data_import.R
- butter_data_import.R
trong mỗi tệp Rmd, tôi sẽ có một cái gì đó như:
```{r include=FALSE}
source('flu_data_import.R')
```
Vấn đề ở đây là chúng ta mất khả năng tái tạo. Giải pháp của tôi là tạo một tài liệu con chung để đưa vào mỗi tệp Rmd. Vì vậy, ở cuối mỗi tệp Rmd tôi tạo, tôi thêm đoạn này:
```{r autodoc, child='autodoc.Rmd', eval=TRUE}
```
Và tất nhiên, 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, điều này được thiết kế cho quy trình làm việc Rmd -> html. Đây sẽ là một mớ hỗn độn xấu xí nếu bạn đi với latex hoặc bất cứ thứ gì khác. Tài liệu Rmd này xem xét môi trường chung cho tất cả các tệp ed source () 'và bao gồm nguồn của chúng ở cuối tài liệu của bạn. Nó bao gồm jquery ui, tableorter và thiết lập tài liệu để sử dụng kiểu accordion để hiển thị / ẩn các tệp có nguồn gốc. Đó là một công việc đang được tiến hành, nhưng hãy thoải mái điều chỉnh nó cho phù hợp với mục đích sử dụng của bạn.
Không phải là một lớp lót, tôi biết. Hy vọng nó cung cấp cho bạn một số ý tưởng ít nhất :)
Rmd
tệp. Nhưng bạn cũng muốn ghi nguồn trong cácmarkdown
tệp khác vào một tệp được dệt kim?