knitr: Knitting separate Rnw documents within an Rmd document

橙三吉。 提交于 2019-12-10 14:49:22

问题


I have a master R markdown document (Rmd) within which I would like to knit several separate Rnw documents (NO child documents) in one of the chunks. However, when I call knit on the Rnw document, the contained R code chunks do not seem to be processed, resulting in an error when trying to run texi2pdf on them.

Illustration of the situation:

Inside master.Rmd:

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

... some code ...

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

tools::texi2pdf(tex_file)

... some code ...


```

Is there some additional configuration required to make this scenario work?


回答1:


There are a few reasons you can't directly do what you are trying to do (calling knit from within a knit environment)...

  1. Knitr patterns are already set.
    [ In this case markdown patterns, so you'd need to set the patterns to 'rnw' patterns. ]
  2. Parsing the chunks (after setting the correct patterns) will add chunk labels to the existing concordance, so unless all chunks are unique you will get a duplicate chunk label error.
    [ This is why knit_child exists. ]
  3. The output target and other options are already set, so you either need a completely new knitr environment or to save, modify, restore all pertinent options.

That being said, it seems like completely expected behavior.

Something along the lines of

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"

or calling Rscript in a loop should do the trick (based on the info provided), which is essentially what @kohske was expressing in the comments.



来源:https://stackoverflow.com/questions/21688250/knitr-knitting-separate-rnw-documents-within-an-rmd-document

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!