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

3
我一直在为一些小型的R教程/研讨会提供服务,其中我将我的“挑战脚本”保存在Rmarkdown文档中。这些包含自由文本和R代码块。其中一些代码块是预填充的(例如,为以后使用设置数据集),而有些是为与会者在研讨会期间填写代码而存在的。
对于每个挑战脚本,我都有一个解决方案脚本。后者包含前者的所有自由文本,但任何挑战块都已填写(这里有一个解决方案工作簿的示例here)。
我真的不想保留相同文件的两个密切相关的副本(挑战和解决方案工作簿)。所以我想知道是否有一种简单的方法可以从我的解决方案脚本构建我的挑战脚本(或从一个挑战脚本和只包含解决方案块的R脚本构建解决方案脚本)。
例如,是否有一种简单的方法可以将一个Rmarkdown文件中所有命名代码块替换为另一个rmarkdown文件中相应命名的代码块?
也就是说,如果我有

challenge.Rmd

标题

介绍

今天我们将学习如何在R中对伪随机数进行采样。

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

BLAH BLAH

文件结尾

solutions.Rmd

标题

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

文件结尾

我该如何用solutions.Rmd中的challenge_1替换challenge.Rmd中的challenge_1

祝一切顺利


只是为了明确,您想将挑战脚本提供给教程的参与者,还是只提供HTML文件? - kath
我将挑战的.Rmd文件提供给参与者。 - Russ Hyde
一种实现方式(也不是很美观):对于您挑战文档中的每个挑战,创建一个解决方案的.Rmd文件,然后将其用作原始文档中的子文件。然后向代码块添加一个参数(类似于eval = show_solution),该参数对于学生设置为FALSE。由于他们没有解决方案.Rmd文件,因此他们无法看到它们... - kath
1个回答

2
这是一种方法:

challenge.Rmd

挑战.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中包含或排除解决方案。除非参与者拥有solution.Rmd,否则他们无法编译show_solution = TRUE的文档。对于show_solution = FALSE,没有问题,并且它可以很好地编译。


我喜欢的是,解决方案块可以引用在两个不同的rmarkdown脚本中定义的变量,尽管它们位于挑战块中。显然,我以前没有研究过rmarkdown/knitr和子文档的内部工作原理。再次感谢。 - Russ Hyde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接