在 Rmarkdown 的 for 循环中使用 ggplotly 和 DT
Using `ggplotly` and `DT` from a `for` loop in Rmarkdown
是否可以从 for
循环或函数内部在 RMarkdown 中使用 ggplotly()
或 datatable()
?示例:
---
title: "Using `ggplotly` and `DT` from a `for` loop in Rmarkdown"
output: html_document
---
```{r setup, include=FALSE}
library(ggplot2); library(DT)
```
## Without `for` loop - works
```{r}
datatable(cars)
g <- ggplot(cars) + geom_histogram(aes_string(x=names(cars)[1] ))
ggplotly(g)
```
## From inside the `for` loop - does not work (nothing is printed)
```{r}
for( col in 1:ncol(cars)) {
datatable(cars) # <-- does not work
print( datatable(cars) ) # <-- does not work either
g <- ggplot(cars) + geom_histogram(aes_string(x=names(cars)[col] ) )
ggplotly (g) # <-- does not work
print ( ggplotly (g) ) # <-- does not work either
}
```
我想知道这是否是因为 interactive 输出根本无法 print
-ed - 设计使然。
打印非交互式输出时不存在此问题。
PS
这与:
Looping headers/sections in rmarkdown?
这似乎是 RMarkdown 的一个长期存在的问题。然而,这是解决方法,发现 here:
lotlist = list()
for (VAR in factor_vars) {
p <- ggplot(mtcars, aes_string(x = "mpg", y = "wt", color = VAR)) + geom_point()
plotlist[[VAR]] = ggplotly(p)
}
htmltools::tagList(setNames(plotlist, NULL))
这是我在我的评论中添加的 的解决方案,适用于您的情况:
---
title: "Using `ggplotly` and `DT` from a `for` loop in Rmarkdown"
output: html_document
---
```{r setup, include=FALSE}
library(plotly); library(DT)
```
```{r, include=FALSE}
# Init Step to make sure that the dependencies are loaded
htmltools::tagList(datatable(cars))
htmltools::tagList(ggplotly(ggplot()))
```
```{r, results='asis'}
for( col in 1:ncol(cars)) {
print(htmltools::tagList(datatable(cars)))
g <- ggplot(cars) + geom_histogram(aes_string(x=names(cars)[col] ) )
print(htmltools::tagList(ggplotly(g)))
}
```
是否可以从 for
循环或函数内部在 RMarkdown 中使用 ggplotly()
或 datatable()
?示例:
---
title: "Using `ggplotly` and `DT` from a `for` loop in Rmarkdown"
output: html_document
---
```{r setup, include=FALSE}
library(ggplot2); library(DT)
```
## Without `for` loop - works
```{r}
datatable(cars)
g <- ggplot(cars) + geom_histogram(aes_string(x=names(cars)[1] ))
ggplotly(g)
```
## From inside the `for` loop - does not work (nothing is printed)
```{r}
for( col in 1:ncol(cars)) {
datatable(cars) # <-- does not work
print( datatable(cars) ) # <-- does not work either
g <- ggplot(cars) + geom_histogram(aes_string(x=names(cars)[col] ) )
ggplotly (g) # <-- does not work
print ( ggplotly (g) ) # <-- does not work either
}
```
我想知道这是否是因为 interactive 输出根本无法 print
-ed - 设计使然。
打印非交互式输出时不存在此问题。
PS
这与:
Looping headers/sections in rmarkdown?
这似乎是 RMarkdown 的一个长期存在的问题。然而,这是解决方法,发现 here:
lotlist = list()
for (VAR in factor_vars) {
p <- ggplot(mtcars, aes_string(x = "mpg", y = "wt", color = VAR)) + geom_point()
plotlist[[VAR]] = ggplotly(p)
}
htmltools::tagList(setNames(plotlist, NULL))
这是我在我的评论中添加的
---
title: "Using `ggplotly` and `DT` from a `for` loop in Rmarkdown"
output: html_document
---
```{r setup, include=FALSE}
library(plotly); library(DT)
```
```{r, include=FALSE}
# Init Step to make sure that the dependencies are loaded
htmltools::tagList(datatable(cars))
htmltools::tagList(ggplotly(ggplot()))
```
```{r, results='asis'}
for( col in 1:ncol(cars)) {
print(htmltools::tagList(datatable(cars)))
g <- ggplot(cars) + geom_histogram(aes_string(x=names(cars)[col] ) )
print(htmltools::tagList(ggplotly(g)))
}
```