如何在 R Shiny 的 uiOutput 上下文中正确使用 checkboxInput 'All/None'?
How to correctly use a checkboxInput 'All/None' in a uiOutput context in R Shiny?
这是上下文:
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(在注释行中),因为在这种情况下我有一个 "Warning: Error in if: argument is of length zero"。我应该把它放在哪里或者我应该在 UI 部分重新正确定义一些东西?
我愿意使用renderUI/uiOutput选项(与"standard mode"相反ui/server)因为将来我会添加一个认证模块,所以可以显示几个"panels" 根据用户。
感谢并抱歉我糟糕的英语:)。
以下对我有效:
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)
}
这是上下文:
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(在注释行中),因为在这种情况下我有一个 "Warning: Error in if: argument is of length zero"。我应该把它放在哪里或者我应该在 UI 部分重新正确定义一些东西?
我愿意使用renderUI/uiOutput选项(与"standard mode"相反ui/server)因为将来我会添加一个认证模块,所以可以显示几个"panels" 根据用户。
感谢并抱歉我糟糕的英语:)。
以下对我有效:
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)
}