0

This is my very first attempt at using Shiny, and I'm quite new to all of this, so I imagine my problem is quite straightforward to someone with more experience.

I have data associated with a shp file that I am trying to map. I want the user to be able to select which data (which disease) to display on the map. There will be a number of other parameters that the user will be able to select (age group affected, per capita statistics, etc), so I am trying to put together a means of narrowing down which data to actually plot. There will be over 500 combinations, so assigning one by one would be tedious. So far I have the following:

(Preceding the code, there's lots of data cleaning and getting things into the right format. Don't think any of that is relevant, but I can include if necessary)

ui <- fluidPage(
    titlePanel("Health in Tanzania"),
    DiseaseList <- c(NameDiagList[5:60],"All Disease"),  
    sidebarLayout(
      sidebarPanel(
        #Select disease
        selectInput("DiseaseSelect", 
                    label = "Disease",
                    choices = DiseaseList,
                    selected = "All Diseases"),
       ),

  mainPanel(
    leafletOutput("TZHealthMap")
    )
  )


 server <- function(input, output) {
    AllNames <- colnames(Map@data)  #make a list of all the column names where health data is stored
    DiseaseChoice <- subset(AllNames, grepl(input$DiseaseSelect, AllNames))  #select only the columns pertaining to the disease selected by user input
    SelectedData <- Map@data[[DiseaseChoice[1]]]  #take the first of the columns selected by user input
         #this will eventually not just be the first item in DiseaseChoice, based on more selection

    LeafletPalette <- colorNumeric(palette = rev(brewer.pal(5, "RdYlGn")), domain = SelectedData)

    output$TZHealthMap <- renderLeaflet({
      leaflet(Map) %>%    
      addProviderTiles("OpenStreetMap.Mapnik") %>%
      addPolygons(color = ~LeafletPalette(SelectedData)) 
    })
  }

  shinyApp(ui = ui, server = server)

When I execute this code, I get the following error message: Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)

If I replace the line DiseaseChoice <- subset(AllNames, grepl(input$DiseaseSelect, AllNames)) with DiseaseChoice <- subset(AllNames, grepl(DiseaseList[1], AllNames)), I get a couple of warnings, but the map is generated, so I suspect there's something wonky with input$DiseaseSelect or using it in the grepl() call or something.

Input appreciated!!

Clare
  • 69
  • 1
  • 13
  • Try to make a simple [reproducible example](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). If we can't run the code it makes it much more difficult to help track down the error. – MrFlick Dec 19 '16 at 22:11
  • I guess you should read the articles on [reactivity](https://shiny.rstudio.com/articles/). Just as error message said, `input`s are only "tracked" inside a reactive context. Try printing a message inside and outside a reactive context: otside it will only be printed once, when the app is initialized, inside it will be printed as many times as you trigger the `reactive`/the user change an `input` used inside the `reactive`. – user5029763 Dec 20 '16 at 12:50

0 Answers0