如何在闪亮的不同选项卡面板上使用相同的输出绑定

时间:2015-06-16 15:04:48

标签: r shiny

在我的server.R文件中,我有一个名为myNet的被动,会生成visNetwork。在我的ui.R中,我有多个标签面板,理想情况下将具有影响visNetwork的不同输入小部件。

是否可以重复使用相同的绑定?

目前,当我尝试运行类似于下面的代码时,收到错误:Uncaught Duplicate binding for ID vis

server.R

的摘录
  myNet <- reactive({
    nodes <- df_nodes
    edges <- df_edges        
    visNetwork(nodes, edges, height = '800px')
  })

  output$vis <- renderVisNetwork(
    myNet()
  )

ui.R

的摘录
  ...

  tabPanel("First Panel",
    sidebarLayout(
      sidebarPanel(
        sliderInput("input1", "Title 1", 
                    min=1, max=10, value=1),
        sliderInput("input2", "Title 2",
                    min=1, max=10, value=1),
        sliderInput("input3", "Title 3",
                    min=1, max=10, value=1)
      ),
      mainPanel(
        visNetworkOutput("vis", height = '800px') # *** ISSUE HERE***
      )
    )
  ),
  tabPanel("Second Panel",
    sidebarLayout(
      sidebarPanel(
        sliderInput("input4", "Title 4", 
                    min=1, max=10, value=1),
        sliderInput("input5", "Title 5",
                    min=1, max=10, value=1),
      ),
      mainPanel(
        visNetworkOutput("vis", height = '800px') # *** ISSUE HERE***       
      )
    )
  ), ...

1 个答案:

答案 0 :(得分:5)

我最后打开了this GitHub issue。共识似乎是以下是最好的方法:

output$vis_1 <- output$vis_2 <- renderVisNetwork(myNet())

或者,正如评论中所提到的,你可以使用一种不那么干的方法:

output$vis_1 <- renderVisNetwork(myNet())
output$vis_2 <- renderVisNetwork(myNet())

Joe Cheng对GitHub问题做了如下评论:

  

&#34;允许多个输出共享相同的ID会产生很多粗糙的副作用,甚至会想到它的含义会让我头疼。例如,两个具有相同ID的Leaflet映射 - 但它们在浏览器中都有很多状态,并将该状态传递回客户端。当他们共享相同的ID时,你怎么能理解它?&#34;

所有人都说,并告诉我,使用dynamic UI方法可以解决相同的行为,并使用开关切换通过uiOutput()向用户显示哪些控件(在ui.R中文件)和output$ui <- renderUI({...})(在server.R文件中)。