2015-02-09 2 views
2

Вдохновленный этим solution Мне просто интересно, можно ли вернуться к кнопке «Все» после того, как вы снимете все имена колонок. Конечно, я могу просто развивать else if функции:Develop Select/Deselect All Button for shiny

if(input$radio == "All"){ 
    hw 
} 
else if (length(input$show_vars) == 0){ 
    hw 
} 
else { 
    hw[,input$show_vars,drop=FALSE] 
} 

и результат подсчитывает все столбцы в наборе данных diamonds но в панели Radiobuttons изменения ничего (т.е. «Manual Select» кнопка будет по-прежнему включена). Вместо этого я хотел бы автоматически изменить radioButton после снятия отметки со всех опций checkboxGroupInput.

ui.R

library(shiny) 

shinyUI(fluidPage(
title = 'Examples of DataTables', 
    sidebarLayout(
    sidebarPanel(

    radioButtons(
    inputId="radio", 
    label="Variable Selection Type:", 
    choices=list(
     "All", 
     "Manual Select" 
    ), 
    selected="All"), 

    conditionalPanel(
    condition = "input.radio != 'All'", 
     checkboxGroupInput(
     'show_vars', 
     'Columns in diamonds to show:', 
     choices=names(hw), 
     selected = "carat" 
    ) 
    ) 

), 
mainPanel(
    verbatimTextOutput("summary"), 
    tabsetPanel(
    id = 'dataset', 
    tabPanel('hw', dataTableOutput('mytable1')) 
) 
) 
) 
)) 

server.R (с моим дополнительным еще, если функция):

library(shiny) 
library(ggplot2) 
data(diamonds) 
hw <- diamonds 

shinyServer(function(input, output) { 

Data <- reactive({ 

if(input$radio == "All"){ 
    hw 
} 
else if (length(input$show_vars) == 0){ 
    hw 
} 
else { 
    hw[,input$show_vars,drop=FALSE] 
} 

}) 

output$summary <- renderPrint({ 
## dataset <- hw[, input$show_vars, drop = FALSE] 
dataset <- Data() 
summary(dataset) 
}) 

# a large table, reative to input$show_vars 
output$mytable1 <- renderDataTable({ 
Data() 
## hw[, input$show_vars, drop = FALSE] 
}) 
}) 

ответ

0

Благодаря Rohit Das я сделал это с помощью wan t to.

Я имею в виду,

data(diamonds) 
hw <- diamonds 

shinyServer(function(input, output,session) { 

Data <- reactive({ 

if(input$radio == "All"){ 
    hw 

} 
else if (length(input$show_vars) == 0){ 
    updateRadioButtons(session, 
         "radio", 
         "Variable Selection Type:", 
         choices=list("All","Manual Select"), 
         selected = "All") 
    updateCheckboxGroupInput(session, 
          'show_vars', 
          'Columns in diamonds to show:', 
          choices=names(hw), 
          selected = "carat") 
} 

else { 
    hw[,input$show_vars,drop=FALSE] 
} 

})

+0

Рад, что помог. Кстати, почему вы добавляете updateRadioButtons и updateCheckboxGroupInput в вектор с помощью c(). Я думаю, вы можете просто оставить часть c(), и они будут исполняться один за другим. Конечно, в этом случае избавиться от запятой посередине. –

+0

ОК, я просто сделал это. Еще раз спасибо:)! – Nicolabo

0

shinyWidgets библиотека имеет хорошую функцию под названием pickerInput(), которая поставляется с функцией "выбрать все/Снять выделение". После долгих исследований, я нашел, что это единственный Блестящая вход, который имеет эту функцию встроенного в:

enter image description here

Ссылка на сайт: https://dreamrs.github.io/shinyWidgets/index.html