在没有管道运算符的情况下将传单映射集成到 Shiny %>%

Integrate a leaflet map into Shiny without the pipe operator %>%

好的,我已经能够将地图集成到 Shinny 中,但总是在我使用管道运算符时。这次我有一个带有 for 循环的地图,因为我是 R 的新手,所以我不知道在那种情况下如何使用管道运算符。

传单图如下:

使用的库:

library(data.table)
library(leaflet)
library(shiny)

data.table:

lat<-c(40.41766, 40.43305 ,40.43687, 40.39563, 40.39088, 40.39215, 40.39458, 40.40451, 40.40627, 40.40864)
lng<-c(-3.701328, -3.709352, -3.708531, -3.736556, -3.734796, -3.741867, -3.741222, -3.705399, -3.710980, -3.710310)
colors<-c("#3D00FFFF","#52FF00FF","#3D00FFFF","#0052FFFF","#52FF00FF","#52FF00FF","#52FF00FF","#0052FFFF","#3D00FFFF","#0052FFFF")
name<-as.factor(c("Rafa","Luis","Rafa","Belen","Luis","Luis","Luis","Belen","Rafa","Belen"))
hour_range<-c("Sleeping_Hours","Morning_rush_hours","Morning_Working_Hours","Sleeping_Hours","Morning_rush_hours","Morning_Working_Hours","Sleeping_Hours","Morning_rush_hours","Morning_Working_Hours","Morning_Working_Hours")

data<- data.table(name,lat,lng,hour_range,colors)

传单地图:

map<-  leaflet(data)
map<- addTiles(map)
for( name in unique(data$name)){ 
  map<- addPolylines(map, lng=~lng,lat=~lat,data=data[data$name==name & data$hour_range=="Morning_rush_hours",],color=~colors)
  map<-addPolylines(map, lng=~lng,lat=~lat,data=data[data$name==name & data$hour_range=="Sleeping_Hours",],color=~colors)
}

map

这张地图工作正常问题是我不知道如何将它与 shinny 集成,因为我没有使用管道。看来我有一个错误叫做:

缺少参数 "map",没有默认值。因为 Shiny 看不到我的地图。

enter image description here

如果需要,您确实可以制作没有管道的地图。使用您提供的数据查看以下内容:

library(shiny)
library(leaflet)

ui <- fluidPage(
    leafletOutput("map")
)

server <- function(input, output, session) {
    output$map <- renderLeaflet({
        my_map <- leaflet(data)
        my_map <- addTiles(map =  my_map)
        my_map <- addMarkers(map = my_map, lat = ~lat, lng = ~lng)
    })
}

shinyApp(ui, server)

输出与使用管道 运行 时相同。我首先将 leaflet 创建的地图分配给一个名为 my_map 的对象。然后我只是在后续调用中添加 map = my_map 的额外参数。

非常感谢。我会给你更多的信息。看看传单地图如下,效果很好:

map<-  leaflet(data)
map<- addTiles(map)
for( name in unique(data$name)){ 
  map<- addPolylines(map, lng=~lng,lat=~lat,data=data[data$name==name & data$hour_range=="Morning_rush_hours",],color=~colors)
  map<-addPolylines(map, lng=~lng,lat=~lat,data=data[data$name==name & data$hour_range=="Sleeping_Hours",],color=~colors)
}

但后来我将它添加到 shiny 中,它没有检测到地图,当我使用管道时它可以工作,但在这种情况下,因为我使用的是 for 循环,然后我不知道如何使用管道:

ui<-fluidPage(
  leafletOutput("samplemap")
)

server<-function(input,output){
  output$samplemap<-renderLeaflet({map<-  leaflet(data)
  map<- addTiles(map)
  for( name in unique(data$name)){ 
    map<- addPolylines(map, lng=~lng,lat=~lat,data=data[data$name==name & data$hour_range=="Morning_rush_hours",],color=~colors)
    map<-addPolylines(map, lng=~lng,lat=~lat,data=data[data$name==name & data$hour_range=="Sleeping_Hours",],color=~colors)
  }
})
}
shinyApp(ui, server)

我认为错误是我没有调用地图,或者这样。

希望你能帮忙,

试试下面的例子。当您取消注释 renderLeaflet 中对 my_map 的最后一次调用时,也尝试 运行 它。这是函数的 return 值,如果你不调用它,什么也不会发生。

library(shiny)
library(leaflet)

data = data.frame(
  lng = runif(100,15,16),
  lat = runif(100,45,50)
)

ui <- fluidPage(
  leafletOutput("map")
)

server <- function(input, output, session) {
  output$map <- renderLeaflet({
    my_map <- leaflet(data)
    my_map <- addTiles(map =  my_map)
    for (i in 1:3) {
      my_map <- addCircleMarkers(map = my_map, lat = ~lat, lng = ~lng)
      my_map <- addCircleMarkers(map = my_map, lat = ~lat * i/10, lng = ~lng * i/10, color ="red")
      my_map <- addCircleMarkers(map = my_map, lat = ~lat * i/30, lng = ~lng * i/30, color ="green")
    }

    ## Uncomment the next line, to see whats happening.
    my_map
  })
}

shinyApp(ui, server)