我想将一个降价文档的特定块中的代码包含到第二个降价文档中.我希望通过按名称引用块来实现(请不要使用行号引用hacky).我不想在孩子中运行所有代码,因为其中一些代码非常耗时.
这是我尝试过的.我们必须在markdown文档中read_chunk包含普通R脚本.有run_chunk,但是这是否可以与外部的文档(我没有到目前为止,运气好的话),可以使用目前还不清楚.
我们可以做这让整个降价文档里面的另一个运行:
```{r child='first.Rmd'}
```
Run Code Online (Sandbox Code Playgroud)
但是,如何才能将子文档中的一个特定块添加到另一个文档中?这是一个小例子:
这是 test-main.Rmd
```{r pick-up-the-kid, child='test-child.Rmd'}
```
Run Code Online (Sandbox Code Playgroud)
这是 test-child.Rmd
Hi, there. I'm a child.
```{r test-child-1}
1+1
dnorm(0)
```
```{r test-child-2}
2+2
dnorm(0)
```
Run Code Online (Sandbox Code Playgroud)
当我们跑步时,test-main.Rmd我们得到这个:
Hi, there. I’m a child.
1+1
## [1] 2
dnorm(0)
## [1] 0.3989
2+2
## [1] 4
dnorm(0)
## [1] 0.3989
Run Code Online (Sandbox Code Playgroud)
几乎可以做到的一种方法是ref.label.如果我们这样编辑test-main.Rmd:
```{r pick-up-the-kid, child='test-child.Rmd', ref.label='test-child-2'}
```
Run Code Online (Sandbox Code Playgroud)
输出只有所需的块,但它是重复的,这是不好的:
Hi, there. I’m a child.
2+2
## [1] 4
dnorm(0)
## [1] 0.3989
2+2
## [1] 4
dnorm(0)
## [1] 0.3989
Run Code Online (Sandbox Code Playgroud)
复制的一个解决方案是eval = FALSE, echo = FALSE在子文档中的块选项中使用:
```{r test-child-2, eval = FALSE, echo = FALSE}
2+2
dnorm(0)
```
Run Code Online (Sandbox Code Playgroud)
这给出了期望的结果:
2+2
## [1] 4
dnorm(0)
Run Code Online (Sandbox Code Playgroud)
但是改变子文档中的块是不方便的,因为子文档中的其他块需要该块,并且每次运行主doc时我都不想在子文档中使用几个块进行更改,它对重现性不好.
如何才能得到只有大块test-child-2从test-child.Rmd进test-main.Rmd参照块名称(无重复或块选项摆弄)?
我正在寻找一个可以调用的函数,child_chunk我可以在其中给出子文档名称和块名称,并在主文档中将块选项应用于独立于子文档中的块选项的块选项.
或者是将代码移动到R脚本文件并在两个降价文档之间共享的唯一解决方案?
我会尝试purl编写原始子文档,然后从代码纠缠文件中读取块,然后您可以随后删除它.
这里的 test-main.Rmd
```{r echo=FALSE}
invisible(purl("test-child.Rmd", output="temp", quiet=TRUE))
read_chunk("temp")
```
```{r ref.label='test_child_2'}
```
```{r echo=FALSE}
unlink("temp")
```
Run Code Online (Sandbox Code Playgroud)
我修改你test-child.Rmd的使用不同的标签,因为你的我的机器没有工作:
嗨,您好.我还是个孩子.
```{r test_child_1}
1+1
dnorm(0)
```
```{r test_child_2}
2+2
dnorm(0)
```
Run Code Online (Sandbox Code Playgroud)
因此输出knit('test-main.Rmd'):
```r
2+2
```
```
## [1] 4
```
```r
dnorm(0)
```
```
## [1] 0.3989
```
Run Code Online (Sandbox Code Playgroud)