【问题标题】:dynamically generated navbar and tabPanels in r shinyr闪亮中动态生成的导航栏和tabPanels
【发布时间】:2018-02-13 15:13:36
【问题描述】:

我正在尝试根据会话用户 ID 创建一个动态生成的导航栏。

我有一个将会话用户映射到该用户客户端列表的数据表。我希望该应用程序生成一个导航栏,其中每个 tabPanel 用于用户拥有的每个客户端。我不确定如何轻松做到这一点,因为 navbarPage() 不接受列表参数。

下面是我的例子

library(shiny)


data <- data.frame(user=c("emily", "emily"), clients=c("client1", "client2"))

CreateCustomNavbarContent <- function(data) {

    l <- lapply(data$clients, function(client) {
        tabPanel(client, 
            h2(client))
    })

    renderUI({
        l
    }) 

}

shinyApp(
  ui <- fluidPage(
    uiOutput("custom_navbar")
  ),

  server <- function(input, output) {

      output$custom_navbar <- renderUI({

          ## commented below doesn't work

          # navbarPage(
          #     CreateCustomNavbarContent(data)
          # )

          navbarPage("",
              tabPanel("client1", 
                  h2("client1")
              ),
              tabPanel("client2",
                  h2("client2")
              )
          )

      })

  }
)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您可以使用do.call 实现您想要的,因此我们可以将参数列表作为单独的参数传递。下面是一个工作示例,我给了 emily 一个叫 John 的同伴,这样你就可以验证代码是否符合你的要求;)

    希望这会有所帮助!

    library(shiny)
    
    data <- data.frame(user=c("Emily", "Emily","John","John"), clients=c("client1", "client2","client3","client4"))
    
    ui = fluidPage(
      selectInput('select_user','Select user:',unique(data$user)),
      uiOutput('mytabsetpanel')  
    
    )
    server = function(input, output, session){
      output$mytabsetpanel = renderUI({
        myTabs = lapply(data$clients[data$user==input$select_user], tabPanel)
        do.call(tabsetPanel, myTabs)
      })
    }
    shinyApp(ui,server)
    

    【讨论】:

      猜你喜欢
      • 2014-04-21
      • 2016-06-28
      • 2021-03-15
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2017-06-22
      • 2015-05-12
      • 1970-01-01
      相关资源
      最近更新 更多