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

5
我有一个主R Markdown文档(Rmd),我想在其中一个代码块中“编织”几个独立的 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 ...


```

这种情况需要进行其他配置吗?

至少要向XLConnect致以敬意,因为它是一个非常好的编程工具。 - Brandon Bertelsen
1
不是很好的解决方案,但你可以通过从 .Rmd 调用新进程来完成:system("R -e \"knitr::knit('sub.Rnw')\"") - kohske
1
这里提供一个最小工作示例可能会有帮助。您想让最终文档包括从knit("sub.Rnw", ...)生成的输出,还是只是从单个主Rnw文件生成单独的pdf文件? - Tyler
这个想法是从一个主Rmd页面生成单独的PDF。 - Martin Studer
如果您提供简短完整的Rmd和sub.Rnw文档,那么其他人调试您的问题会更加容易。如果只提供一个不完整的示例文件,那么我们就只能猜测您做了什么。 - Tyler
想要从.Rmd输出多个文档似乎有些奇怪。为什么不从主脚本输出您的文档,这将编织所有您的文档? - Karl Forner
1个回答

3

你不能直接做你尝试做的事情(在knit环境中调用knit),原因有以下几点:

  1. Knitr模式已经设置。
    [ 在这种情况下是markdown模式,所以需要将模式设置为“rnw”模式。 ]
  2. 解析块(在设置正确的模式之后)会将块标签添加到现有的一致性中,因此除非所有块都是唯一的,否则您将收到重复的块标签错误。
    [ 这就是为什么要使用knit_child的原因。 ]
  3. 输出目标和其他选项已经设置,因此您需要完全新的knitr环境,或者保存、修改、还原所有相关选项。

也就是说,这似乎是完全符合预期的行为。

大致意思如下:

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或在循环中调用Rscript应该能解决问题,这本质上就是@kohske在评论中表达的意思。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接