使用knitr有条件地将子文档列表包含在RMarkdown中

使用knitr有条件地将子文档列表包含在RMarkdown中,r,knitr,r-markdown,R,Knitr,R Markdown,给定子文档列表,如何根据某些条件选择要插入到主控文档中的子文档 在我的用例中,我将一个数据集中的未知条目与第二个数据集中的所需条目进行匹配。第二个数据集具有与每个条目关联的子文档。如果找到匹配项,我希望包括其关联的子文档 这个psuedo代码以其最基本的形式展示了我试图实现的要点(受这个问题的启发): `{r,eval=TRUE} child_docs自己找到了解决方案;只需将子文档向量传递给代码块 ```{r} child_docs <- c("doc1.Rmd", "doc2.Rmd"

给定子文档列表,如何根据某些条件选择要插入到主控文档中的子文档

在我的用例中,我将一个数据集中的未知条目与第二个数据集中的所需条目进行匹配。第二个数据集具有与每个条目关联的子文档。如果找到匹配项,我希望包括其关联的子文档

这个psuedo代码以其最基本的形式展示了我试图实现的要点(受这个问题的启发):

`{r,eval=TRUE}

child_docs自己找到了解决方案;只需将子文档向量传递给代码块

```{r}
child_docs <- c("doc1.Rmd", "doc2.Rmd","doc3.Rmd","doc4.Rmd")
```

```{r, child = child_docs}
```
`{r}

子文档您可以动态呈现子文档

```{r, result='asis'}
cat(knitr::knit_child("child.Rmd", quiet=TRUE))
```
这给了你很大的灵活性

“技巧”是
result='asis'
,这样输出就可以传递给转换(与“编织”相反)

或者,您可以标记对象并避免区块选项中的“asis”:

```{r}
cat(knitr::asis_output(knitr::knit_child("child.Rmd", quiet=TRUE)))
```
这是更健壮的,因为它允许您在嵌套函数等中使用它,而不必依赖于调用者设置了“正确的”块选项

如果要传入“当前”变量和库,请也传入当前环境:

```{r, result='asis'}
cat(knitr::knit_child("child.Rmd", quiet=TRUE, envir=environment()))
```

您好,出于好奇,如果您在
doc1.Rmd
加载所有需要的库,如您的示例所示,是否需要在所有其他库再次加载库?@MasonBeau我不这么认为,但我不建议采用这种方法。如果要执行此操作,则应将其加载到父文档中,例如加载
doc1.Rmd
的Rmd等。如果执行此操作,则应小心,因为如果子文档正在调用未加载的函数和库,则会使代码更加混乱。如果你想要一个更加模块化和一致的代码库,你仍然应该在每个子文档中调用你打算使用的每个库。这似乎是一个更简单的方法,但我认为这太多余了,可能存在一种更聪明的方法。很高兴知道我这么不高兴。TY@MasonBeau我想你会对这个问题感兴趣,在编写儿童文档时,它会在R环境中处理这些事情;
```{r}
child_docs <- c("doc1.Rmd", "doc2.Rmd","doc3.Rmd","doc4.Rmd")
```

```{r, child = child_docs}
```
```{r, result='asis'}
cat(knitr::knit_child("child.Rmd", quiet=TRUE))
```
```{r}
cat(knitr::asis_output(knitr::knit_child("child.Rmd", quiet=TRUE)))
```
```{r, result='asis'}
cat(knitr::knit_child("child.Rmd", quiet=TRUE, envir=environment()))
```