Как написать R-функцию, которая записывает файл rmarkdown? - PullRequest
0 голосов
/ 14 ноября 2018

Можно ли создать функцию, которая записывает 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 голосов
/ 14 ноября 2018

Я бы рекомендовал немного другой подход.Создайте файл RMarkdown со значением param для вида, установленного в yaml файла.Используйте это значение для вашей фильтрации.Затем в другом сценарии используйте функцию 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...