【问题标题】:Trouble embedding an rglwidget within flexdashboard and rmarkdown在 flexdashboard 和 rmarkdown 中嵌入 rglwidget 时遇到问题
【发布时间】:2020-03-19 22:02:48
【问题描述】:

我正在尝试构建一个 flexdashboard,其中包含一个 rgl 小部件以显示一些多变量数据。该问题与this post 相同,我尝试创建的小部件未出现在最终文档中。不幸的是,帖子中的 cmets 对我的解决方案没有帮助,(我从 forge repo 重新安装了 rgl 包)并且没有发布任何答案。我还查看了 Duncan 本人的 this post,也无法根据那里所说的内容实施解决方案。我没有 reprex 包,以前也没有使用过它,而且我的时间有点紧迫,所以这是我尝试使用的格式的 reprex 的最佳尝试。

---
title: "3d widget"
output: html_document
knitr::opts_chunk$set(echo = TRUE)

library(rgl)

with(mtcars, plot3d(x = mpg,
                    y = disp,
                    z = hp,
                    col = cyl,
                    size = 1,
                    type = "s",
                    axes = FALSE,
                    xlab = "",
                    ylab = "",
                    zlab = ""))
rglwidget()

当我编织 .rmd 文件时,我没有看到任何错误,在编织过程中显然没有出现任何问题。当我检查 .html 文件时,我在 html 代码中找到了 rglwidget 元素,但它应该存在的空间仍然是空白的。如果我在 Markdown 之外运行代码,小部件设备将显示在控制台中,而不是在最终文档中。这也不适用于 flexdashboard 输出。

这是我的会话信息。我使用的是 32 位 R,因为数据来自访问数据库,我需要保持架构兼容:

R version 3.6.0 (2019-04-26)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] rgl_0.100.51

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.3              digest_0.6.20           later_0.8.0             mime_0.7               
 [5] R6_2.4.0                jsonlite_1.6            xtable_1.8-4            magrittr_1.5           
 [9] evaluate_0.14           rlang_0.4.4             miniUI_0.1.1.1          promises_1.0.1         
[13] rmarkdown_2.1           webshot_0.5.1           tools_3.6.0             manipulateWidget_0.10.0
[17] htmlwidgets_1.3         crosstalk_1.0.0         shiny_1.3.2             httpuv_1.5.1           
[21] xfun_0.7                yaml_2.2.0              compiler_3.6.0          htmltools_0.4.0        
[25] knitr_1.28

【问题讨论】:

  • 这听起来像是浏览器问题;你的例子对我有用(一旦我添加了缺失的位:结束 YAML 的破折号,代码块周围的反引号)。您是否使用 RStudio 作为查看器?哪个版本?为什么在 64 位 Windows 中使用 32 位 R?
  • 你可能也被这个问题咬过:github.com/rstudio/rstudio/issues/5678>.
  • 即使在我的浏览器中也不会出现:Chrome 版本 79.0.3945.130(官方构建)(64 位)。带有 64 位窗口的 32 位 R 是因为我的数据来自 32 位 Access DB,它需要 32 个 ODBC 驱动程序。当数据库仍然足够小以捕获问题时,我一直在谈论将其迁移到 SQL 服务器。然而,当权者行动缓慢。
  • 在 Chrome 中,输入“chrome://gpu”。查看 WebGL 是否显示为禁用。理想情况下,它将是“硬件加速”。我不确定软件仿真是否足够好。
  • WebGL 和 WebGL2 都是硬件加速的。

标签: r r-markdown rgl


【解决方案1】:

It appears 这是 RStudio 1.2 的问题。作为对我有用的解决方法,在加载 rgl 之前插入这行代码,例如 RStudio community suggests

options(rgl.useNULL=TRUE) 

一个完整的工作示例:

---
title: Embed 3D plots with rgl
output: html_document
---


```{r, setup}
options(rgl.useNULL=TRUE) 
library(rgl)


```{r testrgl}
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)


plot3d(x, y, z, col = rainbow(1000))
rglwidget(elementId = "plot3drgl")

这不应该是必要的,但我认为现在它是一个 hack。

【讨论】:

  • 嗯。我的代码和您的示例仍然无法在 flexdashboard 中工作。在我们对项目采取不同方向之前,我使用的解决方法是使用 magick 库使用来自 rgl 的 spin() 和 movie() 将小部件的 .gif 文件放在一起。然后我只是将该 .gif 链接到仪表板。感谢您的意见!
  • 我的荣幸。我不得不承认我没有在flexdashboard... 内进行测试
【解决方案2】:

解决了。它一直在那里。 Rstudio 附带的渲染器没有渲染小部件。当我在支持 webGL 的网络浏览器中打开我的窗口时,砰!就在那里。不确定这是否是 Rstudio 团队需要了解的内容,或者 webGL 是否是他们想要整合到 IDE 中的内容。

不管怎样,祝大家好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 2014-08-18
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2021-11-12
    • 2018-09-10
    相关资源
    最近更新 更多