使用navbar动态更新DataTable

时间:2018-05-16 08:34:58

标签: r datatable shiny

上下文

我正在建立一个Rshiny应用程序。我创建了一个动态导航栏。现在,我想在每个导航栏的项目(tabPanel)上插入一个数据表。但我不想在导航栏中为每个项目创建一个表格。所以我想知道是否可以只创建一个表,用导航栏选择的项目更新自己?

创建动态导航栏的代码

runApp(list(
  ui = fluidPage(
    navbarPage(theme=shinytheme("paper"),title="test",
      tabPanel(uiOutput('mytabs'))
    )
  ),
  server = function(input, output, session){
    output$mytabs = renderUI({
      nTabs = length(unique(iris$Species))
      myTabs = lapply(unique(iris$Species)[1:nTabs], tabPanel)
      do.call(tabsetPanel, myTabs)
    })
  }
))

现在我想在每个导航栏的项目上显示datatable(subset(iris,Species=="value of navbar"))

有人可以解释我该怎么办?

1 个答案:

答案 0 :(得分:1)

使用问题here,您可以定义一个函数并按如下方式调用它。请注意,csv按钮仅适用于浏览器。

library(shiny)
library(shinythemes)

runApp(list(
   ui = fluidPage(
        navbarPage(theme=shinytheme("paper"),title="test",
           tabPanel(uiOutput('mytabs'))
     )
  ),
server = function(input, output, session){

createTabs <- function(species_r){
  tabPanel(title = paste("Data", species_r, sep=" "), 
           datatable(subset(iris,Species==species_r),rownames = FALSE,
                     extensions = 'Buttons', options = list(dom = 'Bfrtip', buttons = c('copy', 'csv',I('colvis'))))
           )
}

output$mytabs = renderUI({
  nTabs = length(unique(iris$Species))
  myTabs = lapply(unique(iris$Species)[1:nTabs], createTabs)
  do.call(tabsetPanel, myTabs)
  })
 }
))