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

Jas*_*lns 5 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()
  )
Run Code Online (Sandbox Code Playgroud)

片段 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***       
      )
    )
  ), ...
Run Code Online (Sandbox Code Playgroud)

Jas*_*lns 6

我最终打开了这个GitHub问题.共识似乎是以下是最好的方法:

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

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

output$vis_1 <- renderVisNetwork(myNet())
output$vis_2 <- renderVisNetwork(myNet())
Run Code Online (Sandbox Code Playgroud)

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

"允许多个输出共享相同的ID会产生很多粗糙的副作用,甚至考虑它的含义会让我头疼.例如,两张具有相同ID的Leaflet地图 - 但它们都有很多在浏览器中显示状态,并将该状态传达给客户端.当他们共享相同的ID时,您怎么能理解它? "

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