Set global object in Shiny
r, shiny, subset
Solution
`data2` is a function which returns the subset you are looking for. So you need to call `data2` and save the output to some variable then you can plot/summarize the various columns
## data should be defined somewhere up here or in global.R
shinyServer(function(input, output) {
data2 <- reactive(data[data$x == input$z, ])
output$plot <- renderPlot({
newData <- data2()
plot(newData$x, newData$y)
})
output$table <- renderTable({
newData <- data2()
summary(newData$x)
})
})
If you haven't already, I recommend reading through http://rstudio.github.io/shiny/tutorial/#welcome. The page on reactivity addresses this question fairly well.
Problem
Let's say I have the following server.R file in shiny: ``` shinyServer(function(input, output) { output$plot <- renderPlot({ data2 <- data[data$x == input$z, ] # subsetting large dataframe plot(data2$x, data2$y) }) output$table <- renderTable({ data2 <- data[data$x == input$z, ] # same subset. Oh, boy... summary(data2$x) }) }) ``` What can I do in order to not have to run `data2 <- data[data$x == input$z, ]` within every render call? If I do the following, I get a "object of type 'closure' is not subsettable" error: ``` shinyServer(function(input, output) { data2 <- reactive(data[data$x == input$z, ]) output$plot <- renderPlot({ plot(data2$x, data2$y) }) output$table <- renderTable({ data2 <- data[data$x == input$z, ] summary(data2$x) }) }) ``` What did I do wrong?