【问题标题】:Update DataTable dynamically with navbar使用导航栏动态更新 DataTable
【发布时间】:2018-05-16 08:34:58
【问题描述】:

上下文

我正在使用 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"))

有人可以解释我该怎么做吗?

【问题讨论】:

    标签: r datatable shiny


    【解决方案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)
      })
     }
    ))
    

    【讨论】:

    • 我不知道应该在哪里插入它。你能告诉我吗?
    • 你知道如何插入一个观察事件来选择我想显示的列吗?
    • 在那种情况下,我可以从DT包中推荐4. ColVis吗?
    • 不客气。我用 csv 更新答案并复制给未来的读者。
    • 我认为是因为它使用了 JS 库或者可能是我不知道的兼容性问题。所以是的 csv 只能在浏览器中工作。 复制 像 Ctrl+C 一样工作,然后您必须打开一个新的 Excel 工作表或单词,然后按 Ctrl+V 或粘贴。
    猜你喜欢
    • 2017-04-26
    • 2021-04-21
    • 2019-03-12
    • 2019-10-10
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2017-05-09
    • 2021-11-14
    相关资源
    最近更新 更多