如何在Shiny中使用dplyr选择输入?

时间:2017-11-03 14:52:19

标签: r shiny dplyr

我想让这个简单的应用程序正常工作。假设允许用户在dplyr::starwars数据集中选择任意数量的变量,并显示这些变量的不同组合。

library(shiny)
library(tidyverse)

ui <- fluidPage(
   titlePanel("Use selectize with dplyr"),
   selectizeInput("distinct_vars", "Select distinct", choices = names(starwars), multiple = T),
   dataTableOutput("table")
)

server <- function(input, output) {
   output$table <- renderDataTable({
        req(input$distinct_vars)
        arg_list <- rlang::parse_quosures(paste(input$distinct_vars, collapse = ";"))

        starwars %>% 
             distinct(!!arg_list)
   })
}

shinyApp(ui = ui, server = server)

我遇到了distinct(!!arg_list)行的问题。我想将参数作为列表传递给distinct函数。如果我用distinct(!!arg_list[[1]])替换此行,则应用程序可以正常工作,但仅适用于所选的第一个变量。我想允许用户选择任意数量的变量,并将用户的选择传递给dplyr函数。

1 个答案:

答案 0 :(得分:3)

对于多个变量,我们需要!!!而不是!!

 ui <- fluidPage(
   titlePanel("Use selectize with dplyr"),
   selectizeInput("distinct_vars", "Select distinct", choices = names(starwars), multiple = T),
   dataTableOutput("table")
)

server <- function(input, output) {
   output$table <- renderDataTable({
        req(input$distinct_vars)
        arg_list <- rlang::parse_quosures(paste(input$distinct_vars, collapse = ";"))

        starwars %>% 
             distinct(!!! arg_list)
   })
}

shinyApp(ui = ui, server = server)

-output

enter image description here