2015-03-03 3 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) 

У меня есть признак того, что функция выполнялась, но то, что она делает, на самом деле является неотображением флажков. BTW, когда я поставил выделение при определении 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()', которая поставляется с симпатичным интерфейсом «select all/deselect all» для ввода: https://dreamrs.github.io/shinyWidgets/index.html –

ответ

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=campaigns_list на selected=unlist(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

добавить кнопку «Отменить выбор» для полной solution – MySchizoBuddy

+0

use observEvent вместо наблюдения – MySchizoBuddy

Смежные вопросы