在Shiny中使用相同的输出元素两次

问题描述:

取自Shiny画廊的示例。我想在第一个选项卡上显示ex1和ex2,在第二个选项卡上有一些中断和ex2。在Shiny中使用相同的输出元素两次

ui.R

navbarPage(
    title = 'DataTable Options', 
    tabPanel('Display length',  DT::dataTableOutput('ex1')), 
    tabPanel('Length menu',  DT::dataTableOutput('ex2')) 
) 

server.R

function(input, output) { 

    # display 10 rows initially 
    output$ex1 <- DT::renderDataTable(
    DT::datatable(iris, options = list(pageLength = 25)) 
) 

    # -1 means no pagination; the 2nd element contains menu labels 
    output$ex2 <- DT::renderDataTable(
    DT::datatable(
     iris, options = list(
     lengthMenu = list(c(5, 15, -1), c('5', '15', 'All')), 
     pageLength = 15 
    ) 
    ) 
) 

} 

我想下面的代码将工作,但事实并非如此。它确实显示任何选项卡中的任何内容。

navbarPage(
    title = 'DataTable Options', 
    tabPanel('Display length',  DT::dataTableOutput('ex1'), 
      HTML("<br><br><br>"), 
      DT::dataTableOutput('ex2')), 
    tabPanel('Length menu',  DT::dataTableOutput('ex2')) 
) 

你的UI代码是好的,但:

闪亮不支持多个输出具有相同的名称。此代码 将生成HTML,其中两个元素具有相同的ID,即 无效的HTML。

所以,我认为你唯一的解决方案是创建第三个表。最好的选择是在中间使用反应式,所以避免使用相同的代码两次。

function(input, output) { 

    # display 10 rows initially 
    output$ex1 <- DT::renderDataTable(
    DT::datatable(iris, options = list(pageLength = 25)) 
) 

    # -1 means no pagination; the 2nd element contains menu labels 

    iris_table <- reactive({ 
    DT::datatable(
     iris, options = list(
     lengthMenu = list(c(5, 15, -1), c('5', '15', 'All')), 
     pageLength = 15 
    ) 
    ) 
    }) 

    output$ex2 <- DT::renderDataTable(
    iris_table() 
) 
    output$ex3 <- DT::renderDataTable(
    iris_table() 
) 

} 

希望这有助于!