在循环的孩子中停止knitr序言.Rnw文件

时间:2013-12-13 13:52:49

标签: r loops parent-child knitr sweave

我正在循环一个子.Rnw文件,以便我可以重复不同物种的情节。不幸的是,knitr(我认为)的序言在每个循环的开头重复,因此.pdf将无法编译。如果我手动删除.tex文件中重复的前导码,一切都很好。我有一种感觉,我错过了父母和孩子之间的一些联系,但无法找到确切的位置。我正在使用R-studio和下面列出的文件。

main.Rnw

\documentclass{article}
\begin{document}

<<>>=
some R stuff
@

<<runall, include =FALSE>>=
out<-c()
for(species in c('RH', "GU", "RA", "KI")){
out<- c(out, knit_child('spsummary.Rnw')
}
@

\Sexpr{paste(out, collapse='n')}
\end{document}

子文档(spsummary.Rnw)在每个物种上循环:

<<>>=
set_parent("main.Rnw")
@

<<>>=
more R stuff
@

\begin{table}
...
\end{table}

\clearpage
\newpage

2 个答案:

答案 0 :(得分:0)

您可以从子文档中删除set_parent,因为您不想独立编译子项。请参阅help

中的这句话
  

子文档通常不完整 - 缺少的部分是LaTeX   序言以及\begin{document}\end{document}。有时我们   可能想要编写这些子文档,就好像它们已经完成一样   LaTeX文档。我们唯一需要做的就是提取一个   来自父文档的适当序言并将其添加到此子项   文献。函数set_parent()启用此功能; [...] 然后   子文档的行为就像它有一个序言

答案 1 :(得分:0)

我终于回答了我自己的问题。

这是一个缺少反斜杠的简单案例。

父文档(main)的最后一行应该是:

\Sexpr{paste(out, collapse='\n')}

在'n'之前加上反斜杠