【问题标题】:How to correctly use a checkboxInput 'All/None' in a uiOutput context in R Shiny?如何在 R Shiny 的 uiOutput 上下文中正确使用 checkboxInput 'All/None'?
【发布时间】:2019-05-09 08:14:52
【问题描述】:

这里是上下文:

library(shiny)

liste_statut <- c("A","B","C")

ui <- shinyUI(fluidPage(uiOutput("testUI")))
server <- function(input, output, session) {

   output$testUI <- renderUI({

    navbarPage(
      title = "Test",

  tabPanel(icon = icon("users"), 'Test',

           sidebarPanel(
             # Statut
             checkboxGroupInput("statut", "Statut", liste_statut, liste_statut),
             checkboxInput('selectall_statut', 'Tout / Aucun', T))))

})

  # observe({
  #   updateCheckboxGroupInput(
  #     session, 'statut', choices = liste_statut,
  #     selected = if (input$selectall_statut) liste_statut
  #   )
  # })
}

 shinyApp(ui = ui, server = server)

我想正确使用我的复选框 All/None(在注释行中),因为在这种情况下我有一个“警告:如果错误:参数长度为零”。我应该把它放在哪里,或者我应该在 UI 部分正确地重新定义一些东西?

我愿意使用 renderUI/uiOutput 选项(与“标准模式”ui/server 相反),因为将来我会添加一个身份验证模块,以便能够根据用户显示多个“面板”。

感谢和抱歉我糟糕的英语:)。

【问题讨论】:

    标签: r shiny uioutput


    【解决方案1】:

    以下对我有用:

    library(shiny)
    liste_statut <- c("A","B","C")
    
    ui <- shinyUI(fluidPage(uiOutput("testUI")))
    server <- function(input, output, session) {
    
      output$testUI <- renderUI({
    
        navbarPage(
          title = "Test",
    
          tabPanel(icon = icon("users"), 'Test',
    
                   sidebarPanel(
                     # Statut
                     checkboxGroupInput("statut", "Statut", liste_statut, liste_statut),
                     checkboxInput('selectall_statut', 'Tout / Aucun', T))))
    
      })
    
      observeEvent(input$selectall_statut,{
        val <- liste_statut
        if(!input$selectall_statut)
          val <- character(0)
    
        updateCheckboxGroupInput(
          session, 'statut', 
          selected = val
        )
      })
    }
    

    我最初尝试使用selected = ifelse(input$selectall_statut, liste_statut, character(0)) 而不是中间变量val。但是,ifelse() 只返回一个值,而不是向量。

    如果您要多次执行此操作,那么我建议您使用自定义 ifelse 函数。可能类似于以下内容:

    ifelse2 <- function(test, yes, no){
        if(test)
            return(yes)
        return(no)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-29
      • 2013-11-15
      • 2014-02-03
      • 2019-08-12
      • 1970-01-01
      • 2021-06-20
      • 2016-01-12
      • 1970-01-01
      相关资源
      最近更新 更多