2

当我有以下情况时,有没有办法在纠结的文件中包含外部代码:

<<xref>>=
@

(这里的外部参照是对外部文件中代码的引用)

或者

<<internal-ref>>=
<<xref>>
@

还是我需要获取外部文件并以某种方式从中工作?

当在包中包含 knitr vignettes 时,这是一个问题。在检查小插图的最后阶段,R 尝试获取纠结的文件。缺少代码会导致问题!

我正在使用 1.5 版的 knitr。

4

2 回答 2

1

最初的设计purl()在很多方面都存在缺陷。例如,它不尊重使用<<>>. 我真的不认为R CMD build/check应该纠结这些小插曲,因为编织已经运行了一次代码。也就是说,您可以尝试最新的开发版本,我在其中引入了一个新功能hook_purl(),它应该可以更好地用作 tangling 实用程序。要启用它,请使用

knit_hooks$set(purl = hook_purl)

然后在编织期间进行缠结,这意味着执行的任何内容都会写入 R 脚本。这保证了纠结的 R 脚本真正包含执行的代码。您只需调用knit()一次即可获取输出文档和 R 脚本。

于 2014-02-07T02:44:15.310 回答
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}

它编织得很好,更重要的是,它会生成一个包含所有 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

我没有尝试将它作为一个小插图运行,但由于它没有丢失任何源代码,它看起来至少应该解决你的近端问题......

于 2014-02-02T22:50:22.780 回答