问题
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)...
- Knitr patterns are already set.
[ In this case markdown patterns, so you'd need to set the patterns to 'rnw' patterns. ] - 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. ] - 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