MakleBirt MakleBirt - 3 months ago 17
R Question

R Shiny - Subset dataframe based on reactive input

I am building a shiny app and I need to subset a dataframe based on a user input. I have tried many different ways to do this but I keep running into errors. Currently, this seems to be the simplest method but I get the following error:

Warning in is.na(e2) : is.na() applied to non-(list or vector) of type 'closure'
Error in

==.default
(test$MARKET, var) : comparison (1) is possible only for atomic and list types

I am pretty stuck. Does anyone have some guidance for me? Thanks!

library(shiny)

shinyServer(function(input, output) {

var <- reactive({input$var})

subsetTest <- subset(test, test$MARKET==var)

y <- subsetTest()$PRICE
x <- subsetTest()$DATE

output$ngplot <- renderPlot({
print(ggplot(data=subsetTest(), aes(x=y, y=x)) + geom_line())
})
})

Answer

First, in the subset call you can skip out test$ (not the cause of your problem):

subset(test, MARKET==var)

I suspect your problem is that var is not a string, it is the output of reactive. Try getting the value with var() instead of var

subset(test, MARKET==var())