基于 R Shiny 中的 selectInput 的子集数据框

Subset dataframe based on selectInput in R Shiny

我有一个闪亮的应用程序,我在其中根据数据框中变量之间的关系生成 scagnostics,如下所示

library(binostics)

scagnostics(df$x1,
            df$x2)$s

但是,我想从下拉列表中动态地 select 这些变量。但是当我这样做时,我无法根据输入变量对数据框进行子集化

selectInput("v1", label = "Select Variable 1", choices = selection, selected = "x1"),
selectInput("v2", label = "Select Variable 2", choices = selection, selected = "x2")

scagnostics(df$input$v1,
            df$input$v2)$s

  

可重现的例子:

library(readr)
library(binostics)
library(tidyverse)
library(gridExtra)

big_epa_cars_2019 <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-10-15/big_epa_cars.csv") %>%
  filter(year == 2019)

my_vars <- c("barrels08", "cylinders", "city08", "highway08", "feScore", "fuelCost08", "co2TailpipeGpm", "youSaveSpend")

ui <- fluidPage(

  fluidRow(
    column(1),
    column(3, selectInput("v1", label = "Select x Variable", choices = my_vars, selected = "barrels08")),
    column(3, selectInput("v2", label = "Select y Variable", choices = my_vars, selected = "city08"))
  ),

  fluidRow(
    column(1),
    column(10, plotOutput("scagnosticsplots")),
    column(1))

)



server <- function(input, output, session) {

  output$scagnosticsplots <- renderPlot({

    p1 <- ggplot(big_epa_cars_2019,
                 aes(x = get(input$v1),
                     y = get(input$v2))) +
      geom_point() +
      theme_bw() +
      labs(x = input$v1,
           y = input$v2)


    s <- scagnostics(big_epa_cars_2019$input$v1,
                     big_epa_cars_2019$input$v2)$s
    df_s <- tibble(scag = names(s), value = s) %>%
      mutate(scag = fct_reorder(scag, value))

    p2 <- ggplot(df_s, aes(x=value, y=scag)) +
      geom_point(size=4, colour="orange") +
      geom_segment(aes(x=value, xend=0,
                       y=as.numeric(scag),
                       yend=as.numeric(scag)), colour="orange") +
      theme_bw() +
      labs(x = "Scagnostic value",
           y = "")

    grid.arrange(p1, p2, ncol=2)

  })


}


shinyApp(ui, server)

@Ben 上面评论的回答有效。

s <- scagnostics(big_epa_cars_2019[[input$v1]], big_epa_cars_2019[[input$v2]])$s