2015-03-03 341 views
5

我有一个R Shiny应用程序,其中包含checkboxGroupInput,我试图使用updateCheckboxGroupInput函数创建一个“全选”按钮。 你可以看到下面的完整代码,但基本上我所定义的CB组这样的:R Shiny checkboxGroupInput - 通过点击选择所有复选框

checkboxGroupInput("campaigns","Choose campaign(s):",campaigns_list) 

,然后点击一个按钮,调用函数:

updateCheckboxGroupInput(session,"campaigns","Choose campaign(s):",choices=campaigns_list,selected=campaigns_list) 

我有一个迹象表明,该函数运行,但它所做的实际上是取消选择复选框。 顺便说一句,当我把所选定义的cbGroupInput放在它上面的时候,它确实起作用了,但不是在函数上。

谢谢!

这是我server.R:

library(shiny) 
source('usefulFunctions.R') 
shinyServer(function(input, output, session) { 

    output$cascading <- renderUI({ 
    provider_id <- input$provider 
    if (provider_id == "") return(NULL) 
    campaigns_list <<- t(getCampaigns(provider_id)) 
    tagList(
     checkboxGroupInput("campaigns","Choose campaign(s):", 
         choices = campaigns_list, selected = campaigns_list), 
     actionLink("selectall","Select All") 
    ) 
    }) 

    observe({ 
    if(is.null(input$selectall)) return(NULL) 
    if (input$selectall > 0) 
    { 
     print(campaigns_list) 
     updateCheckboxGroupInput(session,"campaigns","Choose campaign(s):",choices=campaigns_list,selected=campaigns_list) 
    } 
    }) 


}) 
+0

的'shinyWidgets'库有一个很好的名为'pickerInput()'的函数,它带有一个很好的“全选/全选”界面,用于输入:https://dreamrs.github.io/shinyWidgets/index.html – 2018-02-15 22:19:26

回答

7

我还增加了选择和取消选择选择这里通过检查按钮或链接是被2整除

#rm(list = ls()) 
library(shiny) 
campaigns_list <- letters[1:10] 

ui =fluidPage(
    checkboxGroupInput("campaigns","Choose campaign(s):",campaigns_list), 
    actionLink("selectall","Select All") 
) 
server = function(input, output, session) { 

    observe({ 
    if(input$selectall == 0) return(NULL) 
    else if (input$selectall%%2 == 0) 
    { 
     updateCheckboxGroupInput(session,"campaigns","Choose campaign(s):",choices=campaigns_list) 
    } 
    else 
    { 
     updateCheckboxGroupInput(session,"campaigns","Choose campaign(s):",choices=campaigns_list,selected=campaigns_list) 
    } 
    }) 
} 
runApp(list(ui = ui, server = server)) 
2

如果campaigns_list是一个列表,可能是因为你指定所有你的选择,而不是应在selected来选择框的值的列表你的论点是updateCheckboxGroupInput

尝试用selected=unlist(campaigns_list)代替selected=campaigns_list

这里是一个虚拟的名字为例:

library(shiny) 
server<-function(input, output,session) { 
    observe({ 
    if(input$selectall == 0) return(NULL) 
    else if (input$selectall > 0) 
    { 
     variables<-list("Cylinders" = "cyl","Transmission" = "am","Gears" = "gear") 
     updateCheckboxGroupInput(session,"variable","Variable:",choices=variables,selected=unlist(variables)) 
    } 
    }) 
} 

ui <- shinyUI(fluidPage(  
    checkboxGroupInput("variable", "Variable:",list("Cylinders" = "cyl","Transmission" = "am","Gears" = "gear")), 
    actionButton("selectall", "Select All") 
)) 
shinyApp(ui = ui, server = server) 
+1

添加一个Unselect All按钮来完成解决方案 – MySchizoBuddy 2017-07-26 19:00:10

+0

使用observeEvent而不是观察 – MySchizoBuddy 2017-07-26 19:12:23