[英]Using a toggleWidget in rgl with Shiny
我尝试使用以下代码创建可切换的绘图显示但未成功:
library(shiny)
library(rgl)
ui <- (fluidPage(
checkboxInput("chk", label = "Display", value = TRUE),
playwidgetOutput("control"),
rglwidgetOutput("wdg")
))
server <- function(input, output, session) {
options(rgl.useNULL = TRUE)
save <- options(rgl.inShiny = TRUE)
on.exit(options(save))
open3d()
plot3d(rnorm(100), rnorm(100), rnorm(100))
scene <- scene3d()
rgl.close()
plot3d(scene)
output$wdg <- renderRglwidget({
rglwidget(controllers = c("control"))
})
output$control <- renderPlaywidget({
toggleWidget("wdg", respondTo = "chk",
ids = as.integer(names(scene$objects[1])))
})
}
shinyApp(ui = ui, server = server)
使用当前的代码设置,我得到以下错误:
Error: length(buttonLabels) == length(components) is not TRUE
从我可以告诉的方式toggleWidget
包装playwidget
,不过,好像都buttonLabels
和components
都为1的长度特征向量。
我也尝试过对toggleWidget
的ids
变量进行许多不同的更改, toggleWidget
具有相似的成功水平。 在Shiny中rgl
例子似乎很少。
什么是使用的正确方法toggleWidget
在rgl
闪亮?
您看到的特定错误消息是由于rgl
的错误rgl
:当链接到Shiny控件时,需要将toggleWidget
标签明确设置为character()
。 还有另一个与Shiny使用的复选框有关的错误。 这两个错误均已修复。
但是,这还不足以使您的示例发挥作用。 我还没有完全调试它,但是可以看到以下内容:
scene
,因此应将其传递给rglwidget()
。 plot3d
的呼叫,然后在使用这些值toggleWidget
电话。 我不确定其中哪个会导致脚本失败,但是新的demo(shinyToggle)
(如下所示)可以正常工作。
library(shiny)
library(rgl)
open3d(useNULL = TRUE)
ids <- plot3d(rnorm(100), rnorm(100), rnorm(100))[1]
scene <- scene3d()
rgl.close()
ui <- (fluidPage(
checkboxInput("chk", label = "Display", value = FALSE),
playwidgetOutput("control"),
rglwidgetOutput("wdg")
))
server <- function(input, output, session) {
options(rgl.useNULL = TRUE)
save <- options(rgl.inShiny = TRUE)
on.exit(options(save))
output$wdg <- renderRglwidget({
rglwidget(scene, controllers = c("control"))
})
output$control <- renderPlaywidget({
toggleWidget("wdg", respondTo = "chk",
ids = ids)
})
}
if (interactive())
shinyApp(ui = ui, server = server)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.