闪亮的响应式 UI 在同一条件变量上挂起多个 uiOutput 调用

Posted

技术标签:

【中文标题】闪亮的响应式 UI 在同一条件变量上挂起多个 uiOutput 调用【英文标题】:Shiny reactiveUI hangs with multiple uiOutput calls on same condition variable 【发布时间】:2013-01-21 22:40:17 【问题描述】:

我正在尝试制作一个反应式 UI,其中的滑块可以通过闪亮的下拉菜单进出。我有一个带有响应式 UI 滑块的服务器 (server.R):

library(shiny)
shinyServer(function(input, output) 
  output$slider1 <- reactiveUI(function() 
    sliderInput("s1", "slide 1", min = 1,  max = 100, value = 1)  
  )

  output$slider2 <- reactiveUI(function() 
    sliderInput("s2", "slide 2", min = 1,  max = 100, value = 1)   
  ) 
)

我可以使用以下代码 (ui.R) 正常运行服务器:

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel("Hello Shiny!"),
  sidebarPanel(

    selectInput("dataset", "number of buckets:", 
                choices = c(1,2,3)),

    conditionalPanel(
      condition = "input.dataset==2",
      uiOutput("slider1"),uiOutput("slider2")),

    conditionalPanel(
      condition = "input.dataset==1",
      sliderInput("s1", "slide 1", min = 1,  max = 100, value = 1) 
      )
  ),
  mainPanel(
  )
))

但如果我尝试让两个条件面板都调用 uiOutput,服务器会冻结:

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel("Hello Shiny!"),
  sidebarPanel(

    selectInput("dataset", "number of buckets:", 
                choices = c(1,2,3)),

    conditionalPanel(
      condition = "input.dataset==2",
      uiOutput("slider1"),uiOutput("slider2")),

    conditionalPanel(
      condition = "input.dataset==1",
      uiOutput("slider1") 
      )
  ),
  mainPanel(
  )
))

我玩过这个,发现任何时候使用相同的条件变量和多个 uiOutput 调用都会发生这种情况。有什么建议?谢谢。

【问题讨论】:

控制台中的错误信息为Uncaught Duplicate binding for ID slider1。我的猜测是绑定变量发生在执行任何条件语句之前,这就是引发错误的原因。 感谢拉姆纳特。您是如何将错误消息打印到控制台的? 如果您使用的是谷歌浏览器,只需右键单击页面并选择检查元素。这将打开开发人员工具,您将找到一个名为 Console 的选项卡,其中包含错误消息。对于 Firefox,我相信你可以使用 FireBug。 我建议您在Shiny Google Group 上发布此内容以获得更快的答复。 不只是每个响应式UI调用只能有一个唯一ID——输出ID必须是唯一的,句点(输入ID也一样)。如果您在页面上同时有两个具有相同 ID 的输出,则应将其视为应用程序中的错误,无论它们是如何创建的。 【参考方案1】:

请参阅@Joe 的评论以获得答案。

基本上,outputIDs 和 inputIDs 必须是唯一的;同一页面上具有相同 ID 的两个 UI 元素发出并出错。这是闪亮的反应性的限制。

@Jim 的解决方法是为客户端使用的每个输出或输入创建多个元素,例如

 output$slider2_1 <- ...
 output$slider2_2 <- ...

【讨论】:

以上是关于闪亮的响应式 UI 在同一条件变量上挂起多个 uiOutput 调用的主要内容,如果未能解决你的问题,请参考以下文章

NAudio ASIO Playback 在某些设备上挂起

如何在ui中使用使用反应函数作为输入的结果? -r 闪亮

闪亮的 Ui - 多次参考同一个情节

闪亮仪表板中的多个条件

错误:所有观察都在同一组中,同时从闪亮的 ui 列表中动态过滤 R 模型

闪亮的UI - 如何使文本在点符号后的同一位置开始