2013-05-30 54 views
4

已经无缝运行超过一个月的脚本停止在升级到R 3.0.1后将我的子项Latex代码添加到我的主文档中。以下片段用于在我的主文档中包含编译后的test.rnw文件中的文本(以便它可以编译为一个文档)。现在它只包含已编译的rnw文件的文件名。升级到R 3.0后knitr_child抛出错误

<<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 

运行所编织()单独将编译乳胶的代码,如果我再运行knin_child()没有错误,但“out”对象只包含子文件的文件名而不包含内容。

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

回答

7

您不应该以交互方式使用knit_child()。它被设计成在knit()之内被称为

如您所知,knitr的最新版本中的knit_child()会返回子文档的内容(如果不提供第二个参数)。通过明确提供第二个参数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')} 
+0

根据帮助文件,在knit_child点参数()将被传递到编织(),这意味着编织()在knit_child()中调用。错误不是我的主要问题。 knit_child()的行为与以前不同(它在我编译.Rnw文档时返回文件名而不是文件内容)这一事实是我的问题。任何想法如何解决这一问题? – midden

+0

如果我以前不清楚 - 通过knit_child()正确创建了子文档并根据第二个参数进行了命名(至少似乎正在工作),则不会返回文件内容。 – midden

+0

@midden对不起,也许我还不清楚 - 如果你想要文件内容,你不应该提供输出文件名,我已经编辑了我的答案 –