I want to generate multiple plots in an R markdown document as tabbed content in an automated way. I tried to use a for loop as solution for looping over multiple years in my data. The code works fine as simple R code and generates the various plots, but does not work as R markdown code.
This is the central part of the code with the for loop:
### Section {.tabset .tabset-fade}
```{r mydata, echo = F, results = 'asis'}
#data transformation
mydata_year <- split(mydata, mydata$year)
mydata_faculty <- lapply(mydata_year, group_by_faculty)
#for loop generating plots
for (i in 1:length(mydata_faculty)) {
cat("#### ", names(mydata_faculty)[[i]], "\n")
print(paste("The year is", names(mydata_faculty)[[i]]))
myplot <- draw_chart_bar(mydata_faculty[[i]]) %>%
hc_title(text = paste("Year", names(mydata_faculty)[[i]]))
cat("\n")
print(myplot)
cat("\n")
}
```
### {.toc-ignore}
This is the whole setup (data, functions etc.):
---
title: "Test"
output:
html_document
---
```{r setup, include=FALSE}
library(tidyverse)
library(highcharter)
#data
mydata <- structure(list(
year = c(2020L, 2020L, 2020L, 2021L, 2021L, 2021L),
faculty = c("medicine", "medicine", "physics", "chemistry", "medicine", "medicine"),
cost = c(1500L, 1700L, 1300L, 1700L, 2000L, 2000L)), class = "data.frame", row.names = c(NA, -6L)
)
#function for data transformation
group_by_faculty <- function(x) {
x %>% group_by(faculty)
}
#function for drawing bar chart
draw_chart_bar <- function(x) {
hchart(x,"column",
hcaes(x = faculty, y = cost)
)
}
```
### Section {.tabset .tabset-fade}
```{r mydata, echo = F, results = 'asis'}
#data transformation
mydata_year <- split(mydata, mydata$year)
mydata_faculty <- lapply(mydata_year, group_by_faculty)
#for loop generating plots
for (i in 1:length(mydata_faculty)) {
cat("#### ", names(mydata_faculty)[[i]], "\n")
print(paste("The year is", names(mydata_faculty)[[i]]))
myplot <- draw_chart_bar(mydata_faculty[[i]]) %>%
hc_title(text = paste("Year", names(mydata_faculty)[[i]]))
cat("\n")
print(myplot)
cat("\n")
}
```
### {.toc-ignore}
What am I missing here?