使用 knitr 有条件地绘制多个 d3heatmaps
Issue plotting multiple d3heatmaps in conditional with knitr
当尝试在条件内绘制多个 d3heatmaps 时,生成的 HTML 仅绘制最终热图。下面是用于重现错误的 RMD 代码。
---
title: "test"
output: html_document
---
This is an R Markdown document.
```{r}
require(d3heatmap)
myVar = TRUE
if (myVar == TRUE) {
d3heatmap(mtcars, col = "Spectral")
d3heatmap(mtcars, col = "Blues")
}
```
如果热图不符合条件,编织的 HTML 文件中将出现多个。还有其他人 运行 参与其中吗?
sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.3 (El Capitan)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] d3heatmap_0.6.1.1
loaded via a namespace (and not attached):
[1] htmlwidgets_0.6 magrittr_1.5 htmltools_0.3 tools_3.2.3 base64enc_0.1-3
[6] yaml_2.1.13 stringi_1.0-1 rmarkdown_0.9.5 knitr_1.12.3 stringr_1.0.0
[11] digest_0.6.9 evaluate_0.8.3 png_0.1-7
中解释了根本问题:HTML 个小部件 "only work when they are generated from top-level R expressions"。这解释了为什么将绘图包装在 if
语句中不起作用。尽管如此,第二个图还是可见的,因为 if
returns 计算的最后一个表达式的值,因此 "raising" 最后一个图到顶层。
作为解决方案,可以将绘图收集在列表中并按照建议通过 htmltools::tagList
打印 :
```{r}
require(d3heatmap)
myVar = TRUE
res <- list()
if (myVar == TRUE) {
res[[1]] <- d3heatmap(mtcars, col = "Spectral")
res[[2]] <- d3heatmap(mtcars, col = "Blues")
}
htmltools::tagList(res)
```
当尝试在条件内绘制多个 d3heatmaps 时,生成的 HTML 仅绘制最终热图。下面是用于重现错误的 RMD 代码。
---
title: "test"
output: html_document
---
This is an R Markdown document.
```{r}
require(d3heatmap)
myVar = TRUE
if (myVar == TRUE) {
d3heatmap(mtcars, col = "Spectral")
d3heatmap(mtcars, col = "Blues")
}
```
如果热图不符合条件,编织的 HTML 文件中将出现多个。还有其他人 运行 参与其中吗?
sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.3 (El Capitan)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] d3heatmap_0.6.1.1
loaded via a namespace (and not attached):
[1] htmlwidgets_0.6 magrittr_1.5 htmltools_0.3 tools_3.2.3 base64enc_0.1-3
[6] yaml_2.1.13 stringi_1.0-1 rmarkdown_0.9.5 knitr_1.12.3 stringr_1.0.0
[11] digest_0.6.9 evaluate_0.8.3 png_0.1-7
if
语句中不起作用。尽管如此,第二个图还是可见的,因为 if
returns 计算的最后一个表达式的值,因此 "raising" 最后一个图到顶层。
作为解决方案,可以将绘图收集在列表中并按照建议通过 htmltools::tagList
打印
```{r}
require(d3heatmap)
myVar = TRUE
res <- list()
if (myVar == TRUE) {
res[[1]] <- d3heatmap(mtcars, col = "Spectral")
res[[2]] <- d3heatmap(mtcars, col = "Blues")
}
htmltools::tagList(res)
```