我希望能够在循环中创建RMarkdown块。我尝试通过for
循环执行此操作,但没有成功。我想这可以通过lapply
来实现,就像在闪亮的应用程序中创建UIs
一样。但是,到目前为止,我还没有任何成功。
代表:
---
title: "Untitled"
output:
html_document:
theme: united
highlight: tango
toc: true
toc_float:
collapsed: false
smooth_scroll: false
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE)
```
```{r}
library(dplyr)
library(ggplot2)
df <- datasets::iris %>%
dplyr::as_tibble()
```
## setosa
```{r}
df %>%
dplyr::filter(Species == "setosa") %>%
ggplot2::ggplot(ggplot2::aes(Sepal.Length, Petal.Length)) +
ggplot2::geom_point()
```
## versicolor
```{r}
df %>%
dplyr::filter(Species == "versicolor") %>%
ggplot2::ggplot(ggplot2::aes(Sepal.Length, Petal.Length)) +
ggplot2::geom_point()
```
## virginica
```{r}
df %>%
dplyr::filter(Species == "virginica") %>%
ggplot2::ggplot(ggplot2::aes(Sepal.Length, Petal.Length)) +
ggplot2::geom_point()
```
我的目标是创建带有循环的标题(setosa,杂色和virginica)和块。
例如:
for(i in c("setosa", "versicolor", "virginica")) {
## i
df %>%
dplyr::filter(Species == i) %>%
ggplot2::ggplot(ggplot2::aes(Sepal.Length, Petal.Length)) +
ggplot2::geom_point()
}
关于如何实现此目标的任何想法?
答案 0 :(得分:2)
如果要在循环中创建标题和输出,可以执行以下操作:
```{r species_loop, results='asis'}
for(i in c("setosa", "versicolor", "virginica")) {
cat(paste0("\n\n## ", i, "\n"))
p <- df %>%
dplyr::filter(Species == i) %>%
ggplot2::ggplot(ggplot2::aes(Sepal.Length, Petal.Length)) +
ggplot2::geom_point()
print(p)
}
```
所以:
results='asis'
允许将您的cat()
输出解释为Markdown语法cat()
设置了必需的markdown语法以生成标头(用一些换行符包围以确保其正确解释)print()
在循环中绘制图。答案 1 :(得分:1)
基于cat
的函数将为每种虹膜种类复制您的块。对于一次性块,请使用单个cat
。
FUN <- function(x) cat("\n##", x, "
```{r}
df %>%
dplyr::filter(Species == ",x, ") %>%
ggplot2::ggplot(ggplot2::aes(Sepal.Length, Petal.Length)) +
ggplot2::geom_point()
```\n")
要生成显示的.Rmd
文件,可以使用sink
。 (为简洁起见,我将在此处省略标题。)
sink(file="iris.Rmd") ## start `sink`
cat("```{r}
library(dplyr)
library(ggplot2)
df <- datasets::iris %>%
dplyr::as_tibble()
```")
invisible(sapply(c("'setosa'", "'versicolor'", "'virginica'"), FUN))
sink() ## end `sink`
您将在工作目录(.Rmd
)中找到getwd()
文件。