0

这是上下文:

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 相反),因为将来,我将添加一个身份验证模块,以便能够根据用户显示多个“面板”。

感谢并为我糟糕的英语感到抱歉:)。

4

1 回答 1

0

以下对我有用:

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)
}
于 2019-05-09T00:14:52.620 回答