knitr: Knitting separate Rnw documents within an Rmd document

knitr, r, r-markdown, sweave

Solution

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.

Problem

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?

Original source