【发布时间】:2020-05-15 17:18:55
【问题描述】:
library(shiny)
library(leaflet)
library(leaflet.providers)
ui <- fluidPage(
leafletOutput('map',width = "1331",height = "400"))
server <- function(input, output, session){
output$map <- renderLeaflet({
m<-leaflet() %>%
addProviderTiles(providers$OpenStreetMap,
options = providerTileOptions(noWrap = TRUE))%>%
setView(lng =-73.935242, lat =40.730610, zoom= 12)})
observe({ click = input$map_click
if(is.null(click))
return()
else
clicks=data.frame(click[1:2])
leafletProxy("map") %>%
addMarkers(data = clicks) #Adds a marker on each click
clicklist <<- reactiveVal(list()) # empty list
observeEvent(input$map_click, {
click <- input$map_click
temp <<- clicklist() # get the list of past clicks
temp[[length(temp)+1]] <<- click[1:2] # add this click to the list
clicklist(temp)
print(clicklist)}) #show on the console lat and lng
})
}
shinyApp(ui = ui, server = server)
控制台:
reactiveVal: [1] "40.74778, -73.97953"
reactiveVal: [1] "40.73191, -73.99704"
reactiveVal: [1] "40.73191, -73.99704" "40.73191, -73.99704"
上面的代码仅将用户最后一次点击地图保存在“clicklist”对象中,并在用户点击地图时重复多次。
>clicklist
reactiveVal: [1] "40.72931, -73.99326" "40.72931, -73.99326" "40.72931, -73.99326"
对象类是反应值。
> class(clicklist)
[1] "reactiveVal" "reactive"
如何保存每次点击并单独访问它们?
预期输出
>clicklist
[[1]]
[1]40.74778 -73.97953
[[2]]
[1]40.73191 -73.99704
>clicklist[1]
[1] 40.74778, -73.97953
>clicklist[1][[1]][1]
[1] 40.74778
>clicklist[1][[1]][2]
-73.97953
>clicklist[2]
[[1]]
[1] 40.73191 -73.99704
>clicklist[2][[1]][1]
[1] 40.73191
> clicklist[2][[1]][2]
[1] -73.99704
【问题讨论】:
-
在将新输入添加到列表时尝试
unlist。另外,在print中使用clicklist()(带括号)而不是clicklist。