父文档如下:
<<child = "child1.Rnw">>=
@
<<child = "child2.Rnw">>=
@
child 1:
<<>>=
set_parent("parent.Rnw")
x <- 1
@
child 2:
<<>>=
set_parent("parent.Rnw")
x
@
我可以运行父文档。但是,我不能单独运行 child 2 文件。似乎子 2 文档看不到子 1 文档中定义的变量
x
。如何单独运行子 2 文档? 最佳答案
set_parent
无法按您预期的方式工作。从 ?set_parent
:
set_parent("parent.Rnw")
不会 knit
整个父文档,它只提取前导码。因此,使用这个 parent.Rnw
文件
\documentclass{article}
\begin{document}
<<child = "child1.Rnw">>=
@
<<child = "child2.Rnw">>=
@
\end{document}
child2.Rnw
不能单独编译,因为在这种情况下 child1.Rnw
不会运行。有效的是以下1:
knit("parent.Rnw")
knit("child2.Rnw")
由于两个文档都在相同的环境中进行评估(请参阅
knit
的默认 envir
值),来自 parent.Rnw
(及其子项)的对象可用于 child2.Rnw
的后续编织。此外,
?set_parent
提供了一个替代方案:如果可以重新排列
parent.Rnw
使得引用 child1.Rnw
的块位于前导码中\documentclass{article}
<<child = "child1.Rnw">>=
@
\begin{document}
<<child = "child2.Rnw">>=
@
\end{document}
然后
child2.Rnw
可以在没有事先编织 parent.Rnw
的情况下编织。1出于某种原因,
knit2pdf("child2.Rnw")
使我的系统上的 pdflatex.exe
(通过 texify.exe
调用)崩溃。但是,PDF 文件是正确生成的,直接在 TEX 文件上运行 pdflatex
不会造成任何问题。 Nevermind 。关于r - 使用 knitr 时,我可以在子 Rnw 文档之间交换数据吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34574704/