【问题标题】:R shiny; how to use multiple inputs from selectInput to pass onto 'select' option in dplyr?R 有光泽;如何使用来自 selectInput 的多个输入传递到 dplyr 中的“选择”选项?
【发布时间】:2017-02-09 10:00:22
【问题描述】:

我有一个应用程序,我希望在“ui”文件中获取用户输入,并使用该信息更新“服务器”文件中的数据框。以下是代码的简化版本:

Dataframe <- readRDS(Dataframe.rds)
Table <- readRDS(Table.rds)    

ui <- fluidPage(
     selectInput("Location","Location",
              unique(as.character(Table$Locations)), multiple = TRUE)
                )

server <- function(input,output) {
 Dataframe2 <- Dataframe %>% select(get(input$Location))
                                 }

如果我不为 selectInput 使用“multiple = TRUE”选项,则上述代码有效,这意味着 Dataframe2 对象仅选择与用户选择的单个输入匹配的列。但是,我不知道如何为多个输入做同样的事情,因为选择可能从仅从 selectInput 传递的 1 个项目到总共 10 个项目不等。

【问题讨论】:

    标签: r shiny dplyr


    【解决方案1】:

    如果我正确理解了您的问题,这是一个使用 mtcars 数据框进行多项选择的示例:

    library(shiny)
    library(dplyr)
    data(mtcars)
    
    ui <- fluidPage(
      titlePanel("MTCARS"),
      selectInput("Columns","Columns",
                  names(mtcars), multiple = TRUE),
      verbatimTextOutput("dfStr")
    )
    
    server <- function(input, output) {
        Dataframe2 <- reactive({
                mtcars[,input$Columns] 
        })
        output$dfStr <- renderPrint({
                str(Dataframe2())
        })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 嗨,您将如何访问input$Columns 向量中的每个单独元素?或者它是一个列表?例如,如果有一个 for 循环,您就不能使用 input$Columns[[i]] 对吗?你会怎么做?
    • 嗨@InesGuardans。如果您输入 print(class(input$Columns)) 并在 UI 中进行选择后,您将在 str() 命令输出下方看到打印的类。在这种情况下,它是一个字符向量。因此,您可以使用例如 input$Columns[1]。使用 length(input$Columns) 查看您有多少选择。还要检查 null 因为它在您启动应用程序时为 null。希望这会有所帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-02-13
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2021-12-14
    • 2014-02-23
    相关资源
    最近更新 更多