首页 > 解决方案 > 如何编写编写 rmarkdown 文件的 R 函数?

问题描述

是否可以创建一个编写 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)

标签: rr-markdown

解决方案


我会推荐一种稍微不同的方法。param使用文件 yaml 中设置的物种值创建 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截图


推荐阅读