R Shiny中的RGL不会在鼠标左键单击时旋转

RGL in R Shiny not rotating on left mouse button click

就在不久前,迈克回答了我关于如何在 shiny 中嵌入 rgl 的问题,但我们似乎遇到了另一个问题,

这是代码示例:

library(rgl)
library(car)
library(shiny)

cars$time <- cars$dist/cars$speed

ui <- fluidPage(
  hr("how do we get the plot inside this app window rather than in a popup?"),
  rglwidgetOutput("plot",  width = 800, height = 600)
)

server <- (function(input, output) {

  output$plot <- renderRglwidget ({
    rgl.open(useNULL=F)
    scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
    rglwidget()

    })

  })   
shinyApp(ui = ui, server = server)

rgl.open(useNULL=F) 更改为 rgl.open(useNULL=T) 将停止显示弹出窗口,但无论哪种情况,闪亮页面中的 rgl 都会缩放,但不会旋转。

似乎鼠标右键单击注册并起作用,而鼠标左键单击不被识别....

> sessionInfo()
R version 3.3.3 (2017-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

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] shiny_1.0.0 car_2.1-4   rgl_0.97.0 

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.9        knitr_1.15.1       magrittr_1.5       splines_3.3.3      MASS_7.3-45        xtable_1.8-2       lattice_0.20-34   
 [8] R6_2.2.0           minqa_1.2.4        tools_3.3.3        nnet_7.3-12        pbkrtest_0.4-7     parallel_3.3.3     grid_3.3.3        
[15] nlme_3.1-131       mgcv_1.8-17        quantreg_5.33      MatrixModels_0.4-1 htmltools_0.3.5    yaml_2.1.14        lme4_1.1-13       
[22] digest_0.6.11      Matrix_1.2-8       nloptr_1.0.4       htmlwidgets_0.8    mime_0.5           SparseM_1.77       jsonlite_1.2      
[29] httpuv_1.3.3    

您的场景正在使用 mouseMode "polar"(可能是因为 scatter3d 正在设置它)。该模式当前未在 rglwidget 代码中实现。

解决方法是在调用 rglwidget() 之前将 mouseMode 设置为 "trackball",例如在 output$plot 中放这个:

open3d(useNULL=TRUE)
scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
par3d(mouseMode = "trackball")
rglwidget()

注意我的修改:我已经简化了上面的代码。要设置鼠标左键,只需指定mouseMode的一个组件即可。

另一个编辑:最新版本的 rgl 是 0.98.8,在 R-forge 上可用,最终可能在其他地方可用(参见 ),现在支持 "polar" 鼠标处理。它与 R 中的行为不同,但很接近。