Как отфильтровать столбец в shiny, имя которого является выводом из слайдера

#r #shiny

Вопрос:

У меня есть панель мониторинга, где слайдер обновляется на основе выпадающего виджета. Моя проблема в том, что в раскрывающемся списке выбирается имя столбца, а ползунок фильтрует выбранный столбец. Проблема в том, когда я создаю реактивный filtered набор данных: в частности, эта строка: filter(input$selectx gt; input$my_slider[1] . я понимаю , что это не работает, потому что ввод$selectx-это символьное имя столбца (например "mean_radius" , и мне нужно имя без кавычек (например mean_radius ). Я попробовал quote(), {{}} и другие функции, но не смог разобраться в этом

 #loading packages  library(shiny)  library(tidyverse)  library(datateachr) #cancer_sample dataset was used from this data package library(rstatix)  library(shinythemes) library(shinydashboard)  ui lt;- dashboardPage(  dashboardHeader(title = "Cancer", titleWidth = 300),  dashboardSidebar(  width = 300,  selectInput("selectx", label = h3("Select X Variable"),   choices = list("radius_mean", "texture_mean", "perimeter_mean", "area_mean"),   selected = "area_mean"),  tags$br(),    sliderInput("my_slider",  label = h3("Range of X Variable"),   min = min(cancer_sample$area_mean, na.rm = TRUE),  max = max(cancer_sample$area_mean, na.rm = TRUE),  value = c(143.5,2501))  ),  dashboardBody(    #makes the place holder for the plot  box(title = "Scatter Plot", solidHeader = TRUE, collapsible = TRUE, width = 12, plotOutput("my_plot", click = "plot_click")),  box(title = "Data Table", solidHeader = TRUE, collapsible = TRUE, width = 12, tableOutput("my_data"))  )     )  server lt;- function(input, output, session) {    #makes a reactive function to minimize repeated code  filtered lt;- reactive({  #the dataset that is being used  cancer_sample %gt;%  #filters the data set based on the area mean range from the slider, and the check boxes that are selected  filter(input$selectx gt; input$my_slider[1],  input$selectx lt; input$my_slider[2])  })    observe({  col lt;- cancer_sample %gt;% select(input$selectx)    #makes a slider that you can manipulate to show only data points that has an area mean that falls in the certain range  updateSliderInput(session, "my_slider",  value = col,  min = min(col, na.rm = TRUE),  max = max(col, na.rm = TRUE))  })    output$my_plot lt;- renderPlot({  filtered() %gt;%  #produces a graph with area_mean on the x-axis and perimeter_mean on the y-axis.   ggplot(aes_string(x = input$selectx, y = perimeter_mean))    geom_point(aes(colour = diagnosis))   })     output$my_data lt;- renderTable(  filtered() %gt;%  select(ID:area_mean)    ) }  # Run the application  shinyApp(ui = ui, server = server)  

Ответ №1:

Ваша проблема не связана с блестящей связью, поэтому вопрос можно легко упростить.

К сожалению, вы не предоставляете здесь набор данных. Поэтому я не смог привести рабочий пример.

цитата всегда будет возвращать то, что находится внутри quote(input$selectx) -gt; input$selectx , так что это наверняка не решение.

Пожалуйста, используйте, например .data , решение здесь.

 airquality %gt;% filter(.data[[input$selectx]] gt; input$my_slider[1], .data[[input$selectx]] lt; input$my_slider[2])  

Комментарии:

1. я привел воспроизводимый пример. библиотека(datateachr) содержит набор данных