在升级到R 3.0.1之后,已经无缝运行了一个月以上的脚本停止了将我的孩子Latex代码添加到我的主文档中。以下代码段过去将来自已编译的test.rnw文件的文本包含在我的主文档中(以便可以将其编译为一个文档)。现在,它仅包含已编译的rnw文件的文件名。

<<run-all, include=FALSE>>=
    out = NULL
    for (i in 1:10) {
      out = c(out, knit_child('test.rnw', sprintf('test-template-%d.tex', i)))
    }
@

\Sexpr{paste(out, collapse = '\n')}


当我尝试以交互方式运行knit_child命令时,出现以下错误:

> knit_child('test.rnw', sprintf('test-template-%d.tex', i))
Error in setwd(opts_knit$get("output.dir")) : character argument expected


单独运行knit()会编译Latex代码,如果我随后运行knin_child()则不会出错,但“ out”对象仅包含子文件的文件名而不是内容。

任何想法如何解决这一问题?

最佳答案

您不应该交互使用knit_child()。它被设计为在knit()内部调用。

如前所述,如果您不提供第二个参数,则最新版本的knit_child()中的knitr返回子文档的内容。通过显式提供第二个参数sprintf('test-template-%d.tex', i),您的意思是“请将输出写入此文件并返回文件名”。

要解决此问题,您需要删除第二个参数:

<<run-all, include=FALSE>>=
    out = NULL
    for (i in 1:10) {
      out = c(out, knit_child('test.rnw'))
    }
@

\Sexpr{paste(out, collapse = '\n')}

07-28 06:50