在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()
)
}
希望这有助于!