【问题标题】:knitr_child throws error after upgrade to R 3.0knitr_child 升级到 R 3.0 后抛出错误
【发布时间】:2013-05-25 12:48:47
【问题描述】:

在升级到 R 3.0.1 后,一个已经无缝运行了一个多月的脚本停止将我的子 Latex 代码添加到我的主文档中。以下 sn-p 用于将编译后的 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”对象只包含子文件的文件名而不是内容。

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

【问题讨论】:

    标签: r knitr sweave


    【解决方案1】:

    您不应该以交互方式使用knit_child()。它被设计为 inside 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')}
    

    【讨论】:

    • 根据帮助文件,knit_child() 中的点参数将被传递给 knit(),这意味着 knit() 在 knit_child() 中被调用。该错误不是我的主要问题。 knit_child() 的行为不像以前那样(当我编译 .Rnw 文档时它返回文件名而不是文件内容)这一事实是我的问题。任何想法如何解决这个问题?
    • 如果我之前不清楚——子文档由 knit_child() 正确创建并根据第二个参数命名(这样至少看起来可以工作),文件内容是只是没有返回。
    • @midden 对不起,也许我不清楚 - 如果你想要文件内容,你不应该提供输出文件名,我已经编辑了我的答案
    • 谢谢亿辉。也许您在cran.r-project.org/web/packages/knitr/vignettes/… 的示例应该更新以反映这一点?最后一个块触发了有问题的错误。
    猜你喜欢
    • 2014-07-02
    • 1970-01-01
    • 2020-10-05
    • 2021-01-21
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多