Do.call 功能与 R 闪亮和 navlistPanel 和 renderUi

Do.call function with R shiny and navlistPanel and renderUi

我尝试构建一个闪亮的 Web 应用程序,左侧是 navlistPanel,右侧是内容页面。我还想要一个 Id 使用所选 tabPanel 的值作为输入。我也想要一个 navlistPanel 设计。 为此,我找到了这个结构:

ui <- fluidPage(
  sidebarPanel(
      navlistPanel(
         id="id_panel",
         widths=c(12,12),
         tabPanel(title="tab1",value="p1"),
         tabPanel(title="tab2",value="p2"),
         tabPanel(title="tab3",value="p3"),
       )
  ),
  mainPanel(tags$h2("hello"))
     )

server <- function(input, output) {}

shinyApp(ui, server)

除非我希望 tabPanel 的数量取决于前一个函数的 returns。 我尝试使用 renderUI 但是当我尝试放置宽度参数时出现错误,而 ID 参数似乎没问题。以下代码不起作用:

ui <- fluidPage(
  sidebarPanel(
      uiOutput("multipleUI")
      ),
  mainPanel(tags$h2("hello"))
     )


server <- function(input, output) {
  output$multipleUI <- renderUI({
    tabs <- list(NULL)
    for(i in 1:3){
      tabs[[i]] <- tabPanel(title=(paste0("tab",i)), value=paste0("p",i))
    }
    do.call(navlistPanel,c(tabs,id="tab_number",widths=c(12,12)))
  })
  
}    

shinyApp(ui, server)

知道正确的方法吗?谢谢

widths 值之外添加 list()

ui <- fluidPage(
    sidebarPanel(
        uiOutput("multipleUI")
    ),
    mainPanel(tags$h2("hello"))
)


server <- function(input, output) {
    output$multipleUI <- renderUI({
        tabs <- list(NULL)
        for(i in 1:3){
            tabs[[i]] <- tabPanel(title=(paste0("tab",i)), value=paste0("p",i))
        }
        do.call(navlistPanel,c(tabs,id="tab_number",widths=list(c(12,12))))
    })
    
}    

shinyApp(ui, server)