当我有:
时,有没有办法在纠结文件中包含externaL代码<<xref>>=
@
(此处xref是对外部文件中代码的引用)
或
<<internal-ref>>=
<<xref>>
@
或者我是否需要获取外部文件并以某种方式工作?
在包中包含knitr晕影时,这是一个问题。在最后阶段 检查小插图,R尝试获取纠结的文件。缺少代码导致 问题!
我正在使用knitr 1.5版。
答案 0 :(得分:1)
purl()
的原始设计在许多方面存在缺陷。例如,它不使用<<>>
来尊重交叉引用。我真的不认为R CMD build/check
应该纠结这些小插曲,因为编织已经运行了一次代码。也就是说,您可以尝试latest development version,其中我引入了一个新功能hook_purl()
,它应该更好地作为纠结实用程序。要启用它,请使用
knit_hooks$set(purl = hook_purl)
然后在编织时间内完成纠缠,这意味着执行的任何内容都写入R脚本。这可以保证纠结的R脚本确实包含执行的代码。您只需要调用knit()
一次即可获得输出文档和R脚本。
答案 1 :(得分:0)
我也使用 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}
编织得很好,更重要的是,执行purl("main.Rnw")
会产生包含所有R代码的纠结文件"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
我没有尝试将其作为插图运行,但由于它没有遗漏任何源代码,它看起来至少应该解决你的近端问题......