如何编写一个R函数来生成rmarkdown文件?

3

是否可以创建一个函数来编写rmarkdown文档?例如,我想要创建3个不同的html_documents,其中包含iris数据集中不同物种的摘要。有些像下面这样的(非工作示例)

markdown_function  <- function(function_input){

---
title: "Untitled"
date: "November 14, 2018"
output: html_document
---

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

```{r iris}
summary(iris[iris$Species == function_input, ])
```

}

   apply(data.frame(species = c('setosa', 'versicolar', 'virginica')), 1, markdown_function)

1
通常的做法是将参数传递到rmarkdown文档中。Stack Overflow上的建议重复问题rmarkdown网页上的良好介绍 - Gregor Thomas
1个回答

5
我建议采用稍微不同的方法。在文件的yaml中设置一个物种参数(param),创建RMarkdown文件。使用该值进行过滤。然后在另一个脚本中,使用您的apply函数为每个物种编织RMarkdown文件。 RMarkdown,保存为iris_params.Rmd
---
title: "Parameterized iris summary"
date: "November 14, 2018"
output: html_document
params: 
  species: setosa
---

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

```{r iris}
species <- params$species
summary(iris[iris$Species == species, ])
```

渲染脚本:

species <- c("setosa", "versicolor", "virginica")

sapply(species, function(x) {
  rmarkdown::render(input = "iris_params.Rmd", 
                    output_file = sprintf("iris_params_%s.html", x),
                    params = list(species = x))
})

这将创建3个HTML文件,每个文件对应于一个作为参数设置的物种。请注意,默认情况下,文件将只用与输入文件相同的名称创建,只是适当更改扩展名,因此您需要为每个参数值创建输出文件名。我使用sprintf来将物种的值附加到基本文件名上以创建输出文件名。

输出,iris_params_virginica.html:

html screenshot


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