Интеграция карты листовок в Shiny без оператора трубы%>% - PullRequest
0 голосов
/ 26 июня 2018

ОК. Мне удалось интегрировать карты в Shinny, но всегда, когда я использую оператор pipe. На этот раз у меня есть карта с циклом for, и, поскольку я новичок в R, я не знал, как использовать оператор pipe в этом случае.

Карта листовки выглядит следующим образом:

используемые библиотеки:

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, потому что я не использую каналы. И мне кажется, что ошибка называется:

Аргумент "карта" отсутствует без значения по умолчанию. Потому что Блестящий не видит мою карту.

введите описание изображения здесь

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

большое спасибо. Я дам вам больше информации. Посмотрите, как выглядит листовка с картой, и она отлично работает:

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)
}

но затем я добавляю его в блестящий, и он не обнаруживает карту, когда я использую трубы, он работает, но в этом случае, поскольку я использую цикл 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)

Я думаю, что ошибка в том, что я не называю карту или что-то в этом роде.

Надеюсь, вы можете помочь с этим,

0 голосов
/ 27 июня 2018

Попробуйте следующий пример. А также попробуйте запустить его, когда вы раскомментируете последний вызов my_map в renderLeaflet. Это возвращаемое значение функции, и если вы не вызовете ее, ничего не произойдет.

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)
0 голосов
/ 26 июня 2018

Вы действительно можете сделать карту без труб, если вам нужно. Посмотрите на следующее, используя предоставленные вами данные:

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 в последующих вызовах.

...