如何编写一个写入rmarkdown文件的R函数?

时间:2018-11-14 15:06:19

标签: r r-markdown

是否可以创建写rmarkdown文档的函数?例如,我想创建3个不同的htlml_documents,其中包含虹膜数据集中不同物种的摘要。如下所示(不适用示例)

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 个答案:

答案 0 :(得分:2)

我建议使用稍微不同的方法。为文件的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