¿Cómo puedo usar un bucle para escribir un script Rmarkdown redundante? [duplicar]
Estoy creando un archivo Markdown para generar 32 tablas estadísticas. Me gustaría automatizarlo. Las tablas estadísticas se almacenan en una lista. Aquí hay una representación ficticia de mi lista de tablas.
mylist<-list(
fruits=data.frame(fruit=c("Apple","Mango","Banana"),
number=c(45,100,70)),
animals=data.frame(animal=c("Monkey","Lion","Whale","Raven"),
number=c(100,2,20,60)),
countries=data.frame(country=c("France","Senegal","China"),
number=c(200,75,1000)),
cars=data.frame(car=c("Audi","Peugeot","Porsche","Toyota","Alpha Romeo"),
number=c(5,7,18,2,8)))
saveRDS(mylist, file = "mylist.RDS")
Aquí está el script Markdown que utilicé para generar mis resultados:
---
TEtitle: R
author: "MYNAME"
date: "2024-02-16"
output:
word_document: default
html_document: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, eval = TRUE)
```
```{r}
mylist<-readRDS("mylist.RDS")
library(knitr)
```
# Statistics on `r names(mylist)[1]`
```{r}
kable(mylist[[1]])
```
# Statistics on `r names(mylist)[2]`
```{r}
kable(mylist[[2]])
```
# Statistics on `r names(mylist)[3]`
```{r}
kable(mylist[[3]])
```
# Statistics on `r names(mylist)[4]`
```{r}
kable(mylist[[4]])
```
Automatizar con un bucle, eso es lo que intenté, con la esperanza de reproducir el código anterior. No funcionó. No tengo otras ideas. ¿Alguien puede ayudarme?
`r for (i in seq_along(mylist)) {
cat("# Statistics on `r names(mylist)[", i, "]`\n\n")
cat("```{r}\n")
cat("kable(mylist[[", i, "]])\n")
cat("```\n\n")
`
Aceptado
Coloque su for
bucle en un fragmento de código para el cual configuró la opción de fragmento results='asis'
. Aquí hay una solución funcional para lograr el resultado deseado.
---
TEtitle: R
author: "MYNAME"
date: "2024-02-16"
output:
word_document: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, eval = TRUE)
library(knitr)
```
```{r}
mylist <- list(
fruits = data.frame(
fruit = c("Apple", "Mango", "Banana"),
number = c(45, 100, 70)
),
animals = data.frame(
animal = c("Monkey", "Lion", "Whale", "Raven"),
number = c(100, 2, 20, 60)
),
countries = data.frame(
country = c("France", "Senegal", "China"),
number = c(200, 75, 1000)
),
cars = data.frame(
car = c("Audi", "Peugeot", "Porsche", "Toyota", "Alpha Romeo"),
number = c(5, 7, 18, 2, 8)
)
)
```
```{r results='asis'}
for (i in seq_along(mylist)) {
cat("# Statistics on `", names(mylist)[i], "`\n\n")
print(kable(mylist[[i]]))
cat("\n\n")
}
```