【问题标题】:knitr: Knitting separate Rnw documents within an Rmd documentknitr:在 Rmd 文档中编织单独的 Rnw 文档
【发布时间】:2014-02-10 21:24:39
【问题描述】:

我有一个主 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 如果至少作为 XLConnect 的提示。
  • 不是很好的解决方案,但您可以通过从 .Rmd 调用新进程来实现:system("R -e \"knitr::knit('sub.Rnw')\"")
  • MWE 在这里会有所帮助。您希望最终文档包含来自 knit("sub.Rnw", ...) 的输出,还是只是从单个主 Rnw 文件生成单独的 pdf?
  • 这个想法是从单个主 Rmd 页面生成单独的 PDF
  • 如果您提供简短、完整的 Rmd 和 sub.Rnw 文档,其他人可以更轻松地调试您的问题。对于一个不完整的示例文件,您可以让我们猜测您做了什么。

标签: r knitr sweave r-markdown


【解决方案1】:

有几个原因你不能直接做你想做的事(在knit 环境中调用knit)...

  1. 针织图案已设置。
    [在这种情况下,降价模式,所以你需要将模式设置为“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 应该可以解决问题(根据提供的信息),这基本上是@kohske 在 cmets 中所表达的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-08
    • 2016-11-07
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2020-05-12
    • 2016-02-15
    相关资源
    最近更新 更多