【问题标题】:RGL widget not displayed in Shiny appShiny 应用程序中未显示 RGL 小部件
【发布时间】:2018-03-22 09:11:38
【问题描述】:

我已经挣扎了几个小时,试图构建一个包含 RGL 小部件的闪亮应用程序。 我想要一个滑块输入来控制情节的年龄控制演变,并且不显示小部件。

请在下文中找到我目前正在处理的代码。

library(shiny)
library(rgl)


ui <- (fluidPage(
sliderInput("sld", label = "Slider", min = 0., max = 4*pi, value = 0., step = .1),
playwidgetOutput("control"),
 rglwidgetOutput("wdg")
))

server <- function(input, output, session) {
options(rgl.useNULL = TRUE)
save <- options(rgl.inShiny = TRUE)
on.exit(options(save))

# create data for widget
theta <- seq(0, 4*pi, len=100)
xyz <- cbind(sin(theta), cos(theta), sin(theta/2))
open3d()
lineid <- plot3d(xyz, type="l", alpha = 0, lwd = 5, col = "blue")["data"]
scene <- scene3d()
rgl.close()

output$wdg <- renderRglwidget({
rglwidget(scene, controllers = c("control"))
})
control <- ageControl(births = theta,
                    ages = c(-4*pi, -4*pi, 1-4*pi, 0, 0, 1),
                    objids = lineid,
                    alpha = c(0, 1, 0, 0, 1, 0))

output$control <- renderPlaywidget({
playwidget("wgd",control,
            respondTo = "sld")
})}
if (interactive()) shinyApp(ui = ui, server = server)

提前感谢您的帮助。

【问题讨论】:

  • 感谢您的建议。我的理解是这个包不再是最新的。它的功能由 rgl 和 shiny 包覆盖。我说的对吗?
  • @PorkChop Jean-Phi N 是对的。 shinyRGL 已弃用。现在要在shiny 中使用rgl,可以使用rgl 本身给出的一些函数。
  • Jean-Phi N,我不知道这是否有帮助,但我有一个使用 rglsliderInputshiny app here。它有效,但比你的更简单。
  • 感谢@StéphaneLaurent,您的闪亮应用没有使用年龄控制。我考虑过与您使用的方法类似的方法,但我不确定性能(给出的示例是一个更大项目的可重现示例)。

标签: r shiny widget rgl


【解决方案1】:

由于您使用闪亮的sliderInput 来控制事物,因此不会显示playwidget。这是正常的,并且记录在案。

但是,仍然存在一个问题:当我运行您的应用程序时,滑块似乎没有控制显示。这看起来像是rgl 中的错误,而不是您的代码中的错误。不知道该建议什么...

编辑添加:不,不是rgl 错误。在一个地方,您将 rgl 小部件命名为 wgd,在另一个地方命名为 wdg。修正那个错字,你的代码就可以工作了。

【讨论】:

  • 感谢您的反馈。这确实是我的问题:滑块输入没有控制显示。很抱歉,如果最初的问题不清楚。
  • 在您的代码中发现了一个错字,请参阅对答案的编辑。也许rgl 应该抱怨这样的错误。
  • 非常感谢!我确认这在更正后有效。我为这样的错误感到有些羞耻!我同意你关于 rgl 没有引发这种错误的评论:-)。
猜你喜欢
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 2017-07-26
  • 2021-05-20
  • 2022-01-15
  • 2023-01-25
  • 2014-07-27
相关资源
最近更新 更多