knitr_child在升级到R 3.0后抛出错误

mid*_*den 5 r sweave knitr

一个已经无缝运行一个月以上的脚本在升级到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')}
Run Code Online (Sandbox Code Playgroud)

当我尝试以交互方式运行knit_child命令时,我收到此错误:

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

单独运行knit()将编译Latex代码,如果我然后运行knin_child()没有错误,但"out"对象只包含子文件的文件名而不是内容.

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

Yih*_*Xie 8

你不应该以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')}
Run Code Online (Sandbox Code Playgroud)