当我有以下情况时,有没有办法在纠结的文件中包含外部代码:
<<xref>>=
@
(这里的外部参照是对外部文件中代码的引用)
或者
<<internal-ref>>=
<<xref>>
@
还是我需要获取外部文件并以某种方式从中工作?
当在包中包含 knitr vignettes 时,这是一个问题。在检查小插图的最后阶段,R 尝试获取纠结的文件。缺少代码会导致问题!
我正在使用 1.5 版的 knitr。
最初的设计purl()
在很多方面都存在缺陷。例如,它不尊重使用<<>>
. 我真的不认为R CMD build/check
应该纠结这些小插曲,因为编织已经运行了一次代码。也就是说,您可以尝试最新的开发版本,我在其中引入了一个新功能hook_purl()
,它应该可以更好地用作 tangling 实用程序。要启用它,请使用
knit_hooks$set(purl = hook_purl)
然后在编织期间进行缠结,这意味着执行的任何内容都会写入 R 脚本。这保证了纠结的 R 脚本真正包含执行的代码。您只需调用knit()
一次即可获取输出文档和 R 脚本。
我也在使用knitr 1.5 版,您提供的第二个选项对我来说效果很好。
在这里,文档中唯一的 R 代码存储在一个命名的未评估块中"child.Rnw"
:
<<xref, eval=FALSE, echo=FALSE, results="hide">>=
d <- 1:10
d
@
该文件及其块被使用该选项"main.Rnw"
的初始块读入主文件。child="filename"
第二个块评估代码:
\documentclass{article}
\begin{document}
<<child, child="child.Rnw", eval=TRUE>>=
@
<<internal-ref, eval=TRUE>>=
<<xref>>
@
\end{document}
它编织得很好,更重要的是,它会生成一个包含所有 R 代码purl("main.Rnw")
的复杂文件。看起来像这样:"main.R"
"main.R"
## ----child, child="child.Rnw", eval=TRUE---------------------------------
## ----xref, eval=FALSE, echo=FALSE, results="hide"------------------------
## d <- 1:10
## d
## ----internal-ref, eval=TRUE---------------------------------------------
d <- 1:10
d
我没有尝试将它作为一个小插图运行,但由于它没有丢失任何源代码,它看起来至少应该解决你的近端问题......