0
我試圖顯示一個navlistPanel有幾個選項卡,併爲每個選項卡的tabsetPanel再次幾個選項卡。我設法使用函數do.call和兩個lapply在navlistPanel和tabsetPanel中顯示所需數量的選項卡。但是,當上載.csv文件時,我無法再顯示錶格。閃亮的do.call,lapply和模塊
有沒有人知道我在做什麼錯在這裏? 這裏是我的代碼:
library(shiny)
library(shinydashboard)
moduleUI <- function(id){
ns <- NS(id)
tagList(
sidebarLayout(
sidebarPanel(
fileInput(ns("file"), label = "", multiple = TRUE,
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv'))
),
mainPanel(div(dataTableOutput(ns('table')), style = "font-size: 70% ;width: 70"))
))}
module <- function(input, output, session){
output$table <- renderDataTable({
inFile <- input$file
if (is.null(inFile))
return(NULL)
read.csv(inFile$datapath)
})
}
moduleUI2 <- function(id){
ns <- NS(id)
tagList(
do.call(navlistPanel, args = c(id = "tabs", lapply(1:4, function(i) {
tabPanel(title = paste("tab", i), style = 'overflow-x: scroll',
mainPanel(
do.call(tabsetPanel, c(id = paste0("versions",i), lapply(1:5, function(n){
tabPanel(title = paste("version", n),
moduleUI(paste("base",i, n, sep = "_")),
h4(paste("tab", n))
)
}))),
width = 12)
)
})))
)}
module2 <- function(input, output, session){
lapply(1:4,function(i) {
lapply(1:5, function(n) {
callModule(module, paste("base",i,n, sep = "_"))
})
})
}
ui <- dashboardPage(
dashboardHeader(title = "App"),
dashboardSidebar(
sidebarMenu(id = "tabs",
menuItem("Tab1", tabName = "Tab1")
)
),
dashboardBody(
tabItems(
tabItem(tabName = "Tab1",
moduleUI2("base")
))
))
server <- function(input, output, session){
callModule(module2, "base")
}
shinyApp(ui = ui, server = server)
看起來你是在/重複的ID在'tabsetPanel'裏面。嘗試像'do.call(tabsetPanel,c(id = paste(「versions」,i),...'和'moduleUI(paste(「base」,i,n,sep =「_」))''''。 – user5029763
非常感謝您的幫助,您的解決方案運行良好,但我現在對我的應用程序進行了一些更改(請參閱編輯代碼),添加了另一個模塊,並且dataTable不再顯示。這次錯了嗎? – MaxPlank
還沒有讀過你的編輯,但我認爲這可能會讓你感興趣:https://github.com/jcheng5/shiny-partials – user5029763