父文档如下:

<<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/

10-12 20:17