繁体   English   中英

在带有闪亮功能的RGB中使用toggleWidget

[英]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 ,不过,好像都buttonLabelscomponents都为1的长度特征向量。

我也尝试过对toggleWidgetids变量进行许多不同的更改, toggleWidget具有相似的成功水平。 在Shiny中rgl例子似乎很少。

什么是使用的正确方法toggleWidgetrgl闪亮?

您看到的特定错误消息是由于rgl的错误rgl :当链接到Shiny控件时,需要将toggleWidget标签明确设置为character() 还有另一个与Shiny使用的复选框有关的错误。 这两个错误均已修复。

但是,这还不足以使您的示例发挥作用。 我还没有完全调试它,但是可以看到以下内容:

  • 您正在绘制场景两次。 您可能只想绘制一次。
  • 由于已将场景保存在可变scene ,因此应将其传递给rglwidget()
  • 拿到IDS切换最安全的方式就是拯救的结果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM