реактивное выражение для растра в блестящем - PullRequest
0 голосов
/ 06 ноября 2019

Я работаю над простым блестящим приложением. Вот мои данные.

  library(data.table)
  library(ggthemes)
  library(ggplot2)
  library(shiny)

  tempList <- list()

  for(i in 1989:1991){

      temp <- as.data.frame(cbind(runif(10,-10.85, 20.02),runif(10, 49.82,59.47)))
      temp$value <- rnorm(10)
      temp$Year <-i
      tempList[[i]] <- temp
  }

  my.df <- rbindlist(tempList)
  names(my.df)[1:2] <- c('lon', 'lat')

Я хочу сделать блестящее приложение, которое отображает растр для каждого года, в зависимости от того, какой год выбирают пользователи

  ui <- fluidPage(

          titlePanel('My dat'),
          sliderInput('yearRef','Select Year',min=1989,max=1991,value=1),

          plotOutput(outputId = 'test')
        )


  server <- function(input, output) {

    tempI <- reactive({my.df %>% dplyr::filter(Year == input$yearRef)})

    output$test <- renderPlot({
    ggplot() + geom_raster(data = tempI, aes(x = lon, y = lat, fill = value)) +
    theme_map() + coord_equal() + scale_fill_viridis_c(option = 'C') 
    })
  }

  shinyApp(ui, server)

Это дает мне ошибку, чтоЯ не понимаю, что tempI - это фрейм данных, поскольку tempI - это класс reactiveExpr. Как мне это исправить?

1 Ответ

2 голосов
/ 06 ноября 2019

при работе с реактивными выражениями в shiny вы должны использовать парантез. В вашем случае:

renderPlot({
    ggplot() + geom_raster(data = tempI(), aes(x = lon, y = lat, fill = value)) +
    theme_map() + coord_equal() + scale_fill_viridis_c(option = 'C') 
    })

Вы можете думать о tempI() как о функции, которая знает, когда ее возвращаемое значение устарело. Как только это произойдет (т. Е. Как только пользователь изменит ползунок), tempI должен быть переоценен. Следовательно, это работает как функция. Это также оправдывает название реактивный.

Вы можете узнать больше о реактивных выражениях здесь .

...