How can I save previous reactive values in R shiny?

120

Question: How can I save previous reactive values in R shiny?

Hi and thank you for your answer,

How can I save previous reactive values in R shiny? I want to extract the coordiantes of the last two marker locations (leaflet). I tried it with the r error isolate function (without success). In it's current form my code can store the currend reactive variable but it can't store the last one.

Here is my code:

# Define UI  ui <- fluidPage(   leafletOutput("mymap",height=800) )  # Define server logic  server <- function(input, output) {      # Leaflet   output$mymap <- renderLeaflet(     leaflet() %>%       addTiles() %>%       setView(lng = 8.53918, lat = 47.36864, zoom = 11) %>%       addDrawToolbar(         targetGroup='draw',         polylineOptions = F,         polygonOptions = F,         rectangleOptions = F,         circleOptions = F,         circleMarkerOptions = F,         editOptions = editToolbarOptions(selectedPathOptions = selectedPathOptions()))  %>%       addLayersControl(overlayGroups = c('draw'), options =                          layersControlOptions(collapsed=FALSE))   )      reactive({          PosData <- data.frame(PosX = c(NA,NA),                           PosY = c(NA,NA),                           PosDegree = c(NA,NA))        })        # Extract coordinates   observeEvent(input$mymap_draw_new_feature,{     if(input$mymap_draw_new_feature$geometry$type == "Point"){        PosData$PosX[1] <- input$mymap_draw_new_feature$geometry$coordinates[[1]]       PosData$PosY[1] <- input$mymap_draw_new_feature$geometry$coordinates[[2]]              PosData$PosX[2] <- PosData$PosX[1]       PosData$PosY[2] <- PosData$PosY[1]              print(PosData)      }else{f <- 2}    }) }  # Run the application shinyApp(ui = ui, server = server)```  

Total Answers: 1

24

Answers 1: of How can I save previous reactive values in R shiny?

In this app, the reactive table PosData will contain the positions of the last 2 markers:

library(shiny) library(leaflet) library(leaflet.extras) library(tidyverse)  ui <- fluidPage(   leafletOutput("mymap", height = 800),   tableOutput("PosData") )  # Define server logic server <- function(input, output) {    # Leaflet   output$mymap <- renderLeaflet(     leaflet() %>%       addTiles() %>%       setView(lng = 8.53918, lat = 47.36864, zoom = 11) %>%       addDrawToolbar(         targetGroup = "draw",         polylineOptions = F,         polygonOptions = F,         rectangleOptions = F,         circleOptions = F,         circleMarkerOptions = F,         editOptions = editToolbarOptions(selectedPathOptions = selectedPathOptions())       ) %>%       addLayersControl(         overlayGroups = c("draw"), options =           layersControlOptions(collapsed = FALSE)       )   )    PosData <- reactiveVal(value = tibble(PosX = numeric(), PosY = numeric()))    output$PosData <- renderTable(PosData())    # Extract coordinates   observeEvent(input$mymap_draw_new_feature, {     req(input$mymap_draw_new_feature$geometry$type == "Point")      PosData() %>%       add_row(         PosX = input$mymap_draw_new_feature$geometry$coordinates[[1]],         PosY = input$mymap_draw_new_feature$geometry$coordinates[[2]]       ) %>%       # keep last 2 points       tail(2) %>%       PosData()   }) }  # Run the application shinyApp(ui = ui, server = server) 

enter image description here