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?

Original source