简体   繁体   English

如何在 R shiny 中保存以前的无功值?

[英]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?如何在 R shiny 中保存以前的无功值? I want to extract the coordiantes of the last two marker locations (leaflet).我想提取最后两个标记位置(传单)的坐标。 I tried it with the isolate function (without success).我用 isolate function 试了一下(没有成功)。 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)```

In this app, the reactive table PosData will contain the positions of the last 2 markers:在此应用程序中,反应表PosData将包含最后 2 个标记的位置:

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)

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM