r语言 - 使用 knitr 在条件中绘制多个 d3 热图时出现问题



当尝试在一个条件中绘制多个d3热图时,生成的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  

Yihui在这个答案中解释了潜在的问题:HTML小部件"只有在从顶级R表达式生成时才有效"。这就解释了为什么将绘图包装在 if 语句中不起作用。尽管如此,第二个图还是可见的,因为if返回最后一个计算表达式的值,从而将最后一个图"提升"到顶层。

作为解决方案,可以将绘图收集在列表中并通过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)
```

相关内容

  • 没有找到相关文章

最新更新