如何用 knitr 创建循环输出?

如何用 knitr 创建循环输出?

在我的论文中,我发现了 79 个需要在附录中详细描述的不同概念。我使用 R 进行分析,并希望使用 knitr 创建该附录。

每个描述都遵循相同的基本“模板”,其中填充了某个概念的值。该模板并不太复杂,但仍需要几个嵌入值的 LaTeX 命令。

如果只有一个概念描述,我会编写简单的 LaTeX 并使用 插入值\Sexpr{}。现在我需要循环遍历数据框,我知道的唯一方法是使用一个块并使用 从中输出 LaTeX 命令cat。这基本上会使代码变得无法维护。

有没有更好的方法来解决该问题?


这是一个 MWE,它只在小页面上输出概念的名称。实际上,数据框将有 7-8 列,并且所有列都必须以某种方式在该小页面上排版,包括每个概念一个图表(直方图)。

\documentclass[a4paper]{article} 
\begin{document}

<<createExampleData, echo=FALSE>>==
all.concepts.in.detail <- data.frame(name=c("red","green","blue", "purple", "yellow", "orange"))
@

 <<AllConceptsInDetail, echo=FALSE, results = 'asis'>>=
 for(rownumber in 1:nrow(all.concepts.in.detail)) {
  cat("\\begin{minipage}{\\textwidth}\n")
  cat("\\section{")
  cat(as.character(all.concepts.in.detail[rownumber, "name"]))
  cat("}\n")
  cat("\\end{minipage}\n\n")
 }
 @

\end{document}

答案1

为了使您的cat()输出正常工作,我认为您需要指定results='asis'。例如:

<<echo=F, results='asis' >>=

我相信这很管用。但我不是专家。我用它以多种方式直接将乳胶输出到我的文档中。最方便的是带有图像的循环,它可以一次输出大量图像或表格。

答案2

参数化 RMarkdown 报告中代码块的示例,它将循环遍历链接向量(Link),并将多页、多个 PDF 包含到报告中。

```{r attachments, results = 'asis'}
for (j in seq(1,length(params$Link))) {
  cat (paste0("\\includepdf[pages={-}]{", params$Link[j], "}"))
}  

```

相关内容