Я хотел бы отобразить 2 разных маршрута на 1 карте. Это код, который я сделал в качестве примера:
### Plot 2 routes on 1 map
# libraries
library(ggmap)
library(ggplot2)
# plot map
basicmap <- get_map(location = c(lon = 3, lat = 50),
zoom = 12,
maptype = "roadmap",
source = "google",
color = "color") #completely random location
basicmap <- ggmap(basicmap)
# determine routes
routes <- data.frame(from = c("Rocquigny", "Nurlu"),
to = c("Heudicourt","Longavesnes"),
stringsAsFactors = FALSE)
# calculate routes
calculationroute <- function(startingpoint, stoppoint) {
route(from = startingpoint,
to = stoppoint,
mode = "bicycling",
structure = "route")
}
#this function calculates the route
calculatedroutes <- mapply(calculationroute,
startingpoint = routes$from,
stoppoint = routes$to,
SIMPLIFY = FALSE)
#calculate the 2 routes
# draw routes
drawroute <- function(route) {
geom_path(aes(data = route,
x = lon,
y = lat))
}
#this functions draws the route
extendedmap <- basicmap + lapply(X = calculatedroutes,
FUN = drawroute)
plot(extendedmap)
#draw the routes
Итак, те шаги, которые я предпринимаю:
- Фоновая карта создана
- Я делаю кадр данных, который содержит начальные и конечные точки для 2 маршрутов.
- С помощью ggmap я вычисляю сегменты этих маршрутов.
- Я стараюсь рисовать маршруты поверх фоновой карты.
К сожалению, последний шаг терпит неудачу, и возникает эта ошибка:
Don't know how to automatically pick scale for object of type function. Defaulting to continuous
Error in data.frame(x = c(2.89030838012694, 3.11003494262694, 2.89030838012694, :
arguments imply differing number of rows: 4, 0
Я выполнил поиск и предыдущий вопрос хотел сделать то же самое. Решение, которое он в конце концов выбрал, использует цикл for, и я бы предпочел сохранить согласованность своего кода, используя вместо этого lapply.
for
является прекрасным решением для этого, так как он добавляет геометрию очень стандартным способом для построения графика в ggplot. нет ничего плохого в использовании цикловfor
в R и/или смешивании их с использованием идиомы*apply
. - person hrbrmstr   schedule 09.08.2015