繁体   English   中英

有条件地在RMarkdown中使用knitr列出子文档列表

[英]Conditionally include a list of child documents in RMarkdown with knitr

给定子文档列表,您如何根据某些条件选择插入主文档?

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

在其最基本的形式,这个伪代码显示了什么,我想实现(被这个问题启发要点这里 ):

```{r, eval=TRUE}
child_docs <- setNames(c(TRUE, FALSE, TRUE, FALSE),
                       c("doc1.Rmd", "doc2.Rmd","doc3.Rmd","doc4.Rmd"))

for(i in seq_along(child_docs)){
    file <- names(child_docs)[i]
    eval_status <- child_docs[i]

    ```{r child = file, eval = eval_status}
    ```

}

```

或者,更简单:

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

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

我也试过这些,但它们没有用(RMarkdown代码块):

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

for(i in seq_along(child_docs)){
    doc <- child_docs[i]
    knit_child(doc)
}

```

(直接在RMarkdown文件中):

`for(i in seq_along(child_doc)){ doc <- child_doc[i]; knit_child(doc)}`

作为参考,这里的手册(在LaTeX中)就在这里

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

```{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))
```

这给你很大的灵活性。

“技巧”是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()))
```

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM