knitr:在Rmd文档中编织单独的Rnw文档

时间:2014-02-10 21:24:39

标签: r knitr sweave r-markdown

我有一个主R降价文档(Rmd),其中我想在其中一个块中knit几个单独的 Rnw文档(无子文档)。但是,当我在Rnw文档上调用knit时,似乎没有处理包含的R代码块,导致在尝试对它们运行texi2pdf时出错。

情况说明:

内部主人。 Rmd

```{r my_chunk, echo=FALSE, message=FALSE, results='asis'}

... some code ...

knit("sub.**Rnw**", output = ..., quiet = TRUE)

tools::texi2pdf(tex_file)

... some code ...


```

是否需要一些其他配置才能使此方案有效?

1 个答案:

答案 0 :(得分:2)

有几个原因可以直接执行您要执行的操作(在knit环境中调用knit)...

  1. 已经设定了针织图案 [在这种情况下降价模式,因此您需要将模式设置为' rnw'图案。 ]
  2. 解析块(在设置正确的模式之后)会将块标签添加到现有的一致性中,因此除非所有块都是唯一的,否则会出现重复的块标签错误。
    [这就是knit_child存在的原因。 ]
  3. 已设置输出目标和其他选项,因此您需要一个全新的knitr环境或保存,修改,恢复所有相关选项。
  4. 话虽如此,这似乎是完全预期的行为。

    的内容
    library(knitr)
    
    files <- list.files( pattern = "*.Rnw", path = ".")
    files
    
    ## [1] "test_extB.Rnw" "test_ext.Rnw"
    
    for( f in files ) {
      system( paste0("R -e \"knitr::knit2pdf('", f, "')\"") )
    }
    
    list.files( pattern="*.pdf", path=".")
    
    ## [1] "test_extB.pdf" "test_ext.pdf"
    

    或在循环中调用Rscript应该可以解决问题(基于提供的信息),这实际上是@kohske在评论中表达的内容。