来自另一个Rmd中的Rmd文件的源代码

Emp*_*cer 7 r knitr r-markdown

我试图让我的代码更加模块化:数据加载和一个脚本,在另一个分析等清洁如果我是,使用R脚本,这将是调用一个简单的问题sourcedata_setup.R里面analysis.R,但我想记录我在Rmarkdown文档中做出的数据设置和分析决策.所以我尝试写一些排序的source_rmd功能,让我从源代码data_setup.Rmdanalysis.Rmd.

到目前为止我尝试过的:

如何获取R markdown文件的答案,如`source('myfile.r')`?如果有任何重复的块名称(由于命名的块setup在Rstudio的笔记本处理中具有特殊行为,因此无法解决).如何将两个RMarkdown(.Rmd)文件合并为一个输出?想要整合整个文档,而不仅仅是一个代码,还需要唯一的块名称.我已经尝试使用knit_expand建议在生成动态[R降价块,但我的名字在双大括号的变量块,而且我真的很喜欢的方式,使这个方便我colaborators使用为好.并knit_child按照如何嵌套编织调用中的建议使用以修复重复的块标签错误?仍然给我重复的标签错误.

Emp*_*cer 14

经过一些进一步的搜索,我找到了解决方案。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, ...)
}
Run Code Online (Sandbox Code Playgroud)