闪亮-过滤用户输入变量

时间:2018-07-21 12:44:23

标签: r shiny shiny-server

我正在尝试创建一个基本的闪亮应用程序,该应用程序允许用户查看所选变量的简单图并根据需要应用过滤器。

但是,我很难使绘图与所应用的过滤器一起工作。如果不应用过滤器,我可以使绘图工作,但是当前代码给出了错误:“错误:没有适用于'filter_'的适用方法应用于“字符”类的对象。“

我意识到问题在于试图绘制的内容,可能与应用于“ input $ Variable”的过滤器有关,但我无法解决!任何帮助表示赞赏!

这是我的代码:

library(shiny)
data <- read.csv("df1Final.csv", stringsAsFactors = T)

ui <- fluidPage(
   titlePanel("PhD Data"),
   sidebarLayout(
      sidebarPanel(
        uiOutput("Variable"), 
        sliderInput("Age.Yr", "Age:", 8, 12, c(8,12), step = 0.25),
         sliderInput("Train.Hr", "Training (Hours):", 9, 11, c(9,11), step = 0.1),
         sliderInput("Grade", "Grade:", 3, 5, c(3,5), step = 1)
      ),
      mainPanel(plotOutput("coolplot"),
                br(), br(),
                verbatimTextOutput("results")
      )
   )
)

server <- function(input, output) {
  output$Variable <- renderUI({
    selectInput("Variable", "Data:", choices = colnames(data)[-1])
  })

  filtered <- reactive({
    if (is.null(input$Variable)) {
      return(NULL)
    }
    input$Variable %>%
      filter(Age.Yr >= input$Age.Yr[1],
             Age.Yr <= input$Age.Yr[2],
             Train.Hr >= input$Train.Hr[1],
             Train.Hr <= input$Train.Hr[2],
             Grade >= input$Grade[1],
             Grade <= input$Grade[2] 
      )
  })

  output$coolplot <- renderPlot({
    if (is.null(filtered())) {
      return()
    }

    ggplot(filtered(), aes(x=filtered(), color=Group)) +
      geom_density()
  })
  output$results <- renderPrint({
    describeBy(data[,input$Variable], data$Group, mat = F)
  })
}

# Run the application 
shinyApp(ui = ui, server = server)

2 个答案:

答案 0 :(得分:0)

我认为问题是您正在筛选Shiny传递给您的实际值,而不是数据。 Input $ Variable不是一组数据,而只是该列数据的标题。

尝试打印输入$ Variable,然后再对其进行操作。

答案 1 :(得分:0)

因此,通过将过滤器调整为:

data[input$Variable] %>% ...

然后我还必须将ggplot中的aes调整为:

aes_string(x=input$Variable)

仍然尝试找出如何将color = Group添加到ggplot中,因为这现在不起作用。