我正在尝试使我的代码更加模块化:在一个脚本中加载和清理数据,在另一个脚本中进行分析,等等。如果我使用的是R脚本,那么在source
上调用data_setup.R
就可以了。在analysis.R
内{1}},但我想记录我在Rmarkdown文档中为数据设置和分析做出的决定。所以我正在尝试编写某种source_rmd
函数,这样我就可以将代码从data_setup.Rmd
提取到analysis.Rmd
。
如果存在任何重复的块名称,则How to source R Markdown file like `source('myfile.r')`?的答案不起作用(因为名为setup
的块在Rstudio的笔记本处理中具有特殊行为,因此存在问题)。 How to combine two RMarkdown (.Rmd) files into a single output?想要整合整个文档,而不仅仅是一个代码,还需要唯一的块名称。我已尝试按照Generate Dynamic R Markdown Blocks中的建议使用knit_expand
,但我必须使用双花括号中的变量命名块,我真的想要一种方法让我的colaborators使用它变得容易同样。使用How to nest knit calls to fix duplicate chunk label errors?中建议的knit_child
仍然会给我带来重复的标签错误。
答案 0 :(得分:3)
进一步搜索后,我找到了解决方案。 knitr中有一个包选项,可以设置为更改处理重复块的行为,在标签后附加一个数字而不是出错。请参阅https://github.com/yihui/knitr/issues/957。
要设置此选项,请使用options(knitr.duplicate.label = 'allow')
。
为了完整起见,我编写的函数的完整代码是
source_rmd <- function(file, local = FALSE, ...){
options(knitr.duplicate.label = 'allow')
tempR <- tempfile(tmpdir = ".", fileext = ".R")
on.exit(unlink(tempR))
knitr::purl(file, output=tempR, quiet = TRUE)
envir <- globalenv()
source(tempR, local = envir, ...)
}