上下文
我正在建立一个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"))
有人可以解释我该怎么办?
答案 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)
})
}
))