将一个Rmarkdown文档中的代码块插入另一个

时间:2018-04-19 08:08:11

标签: r r-markdown knitr

我一直在运行一些小R教程/研讨会,我保留了我的挑战脚本'在Rmarkdown文件中。这些包含自由文本和R代码块。一些代码块是预先填充的(例如,设置数据集供以后使用),而有些代码块是供与会者在研讨会期间填写代码的。

对于每个挑战脚本,我都有一个解决方案脚本。后者包含前者的所有自由文本,但是已经填写了任何挑战块(这是解决方案工作簿的一个示例here)。

我真的不想保留同一个文件的两个密切相关的副本(挑战和解决方案工作簿)。所以我想知道是否有一种简单的方法可以从我的解决方案脚本构建我的挑战脚本(或者来自挑战脚本的解决方案脚本和只包含解决方案块的R脚本)。

例如,是否有一种简单的方法可以将一个Rmarkdown文件中的所有命名代码块替换为另一个rmarkdown文件中相应命名的代码块?

也就是说,如果我有

challenge.Rmd

HEADER

引言

今天我们将学习如何在R

中对伪随机数进行采样
```{r challenge_1}
# Challenge 1: Make a histogram of 100 randomly-sampled 
# normally-distributed values
```

BLAH BLAH

END_OF_FILE

solutions.Rmd

HEADER

```{r challenge_1}
# Challenge 1: Make a histogram of 100 randomly-sampled 
# normally-distributed values
hist(rnorm(100))
```

END_OF_FILE

如何将challenge_1中的challenge.Rmd替换为来自challenge_1的{​​{1}}?

一切顺利

1 个答案:

答案 0 :(得分:2)

这是一种方法:

challenge.Rmd

---
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
show_solution <- FALSE
```

```{r child="solution.Rmd", eval=show_solution}
```

Today we're going to learn about sampling pseudo-random numbers in R

```{r challenge_1}
# Challenge 1: Make a histogram of 100 randomly-sampled 
# normally-distributed values
```

```{r challenge_1_s, eval=show_solution, echo=show_solution}
```


```{r challenge_2}
# Challenge 2: Make a histogram of 100 randomly-sampled 
# uniform-distributed values
```

```{r challenge_2_s, eval=show_solution, echo=show_solution}
```

solution.Rmd

```{r challenge_1_s, eval=FALSE, echo=FALSE}
# Challenge 1: Make a histogram of 100 randomly-sampled 
# normally-distributed values
hist(rnorm(100))
```

```{r challenge_2_s, eval=FALSE, echo=FALSE}
# Challenge 2: Make a histogram of 100 randomly-sampled 
# uniform-distributed values
hist(runif(100))
```

使用show_solution参数,您可以在rmarkdown中包含或排除解决方案。参与者无法编译show_solution = TRUE的文档,除非他们拥有solution.Rmd。对于show_solution = FALSE,没有任何问题,它可以很好地编译。