21622

# How to merge and print multiple code chunks in RMarkdown?

<h3>Question</h3>

My Rmarkdown document looks something like this.

--- yaml metadata --- {r} x <- 10  Some code explanation {r} y <- 10  Some more code explanation {r} z <- x + y  The final output  # 10  

Since I am following the concepts of literate programming, how to print these multiple code chunks stitched together, so I can get the whole working code printed out as follows without the code explanation. Also, can I select specific code chunks and not all and print them out?

x <- 10 y <- 10 z <- x + y 

A trick is to use knitr's ref.label="" chunk option (which takes one or more block labels). It requires that you label your chunks (at least the ones you want to repeat). For demonstration, I've "hidden" (echo=FALSE) one of the blocks to show that the output can be offset (as in https://stackoverflow.com/a/30243074/3358272) though it is still executed in-place.

--- output: md_document --- {r block1} x <- 10  Some code explanation, next code block hidden here but still evaluated {r block2, echo = FALSE} y <- 10  Some more code explanation {r block3} z <- x + y  The final output  # 10  # Annex 1 Each block individually: {r showblock1, ref.label='block1', eval=FALSE}  {r showblock2, ref.label='block2', eval=FALSE}  {r showblock3, ref.label='block3', eval=FALSE}  # Annex 2 If you want them more compactly concatenated: {r showblocks, ref.label=c('block1','block2','block3'), eval=FALSE} 

Produces this markdown file when rendered:

 x <- 10 Some code explanation, next code block hidden here but still evaluated Some more code explanation z <- x + y The final output # 10 Annex 1 ======= Each block individually: x <- 10 y <- 10 z <- x + y Annex 2 ======= If you want them more compactly concatenated: x <- 10 y <- 10 z <- x + y 

You can render into whatever format you want, the results should be similar.