在没有管道运算符的情况下将传单映射集成到 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)
好的,我已经能够将地图集成到 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)