2017-08-16 67 views
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) 
+0

看起來你是在/重複的ID在'tabsetPanel'裏面。嘗試像'do.call(tabsetPanel,c(id = paste(「versions」,i),...'和'moduleUI(paste(「base」,i,n,sep =「_」))''''。 – user5029763

+0

非常感謝您的幫助,您的解決方案運行良好,但我現在對我的應用程序進行了一些更改(請參閱編輯代碼),添加了另一個模塊,並且dataTable不再顯示。這次錯了嗎? – MaxPlank

+0

還沒有讀過你的編輯,但我認爲這可能會讓你感興趣:https://github.com/jcheng5/shiny-partials – user5029763

回答

0

我發現錯誤,只需添加一個NS()到下面一行,則數據將正確顯示:

ns(paste("base",i, n, sep = "_"))