我想使用ggmap中的route函数计算多个地址之间的路由。我想出了两个替代解决方案,但两个都没有工作:
*替代1
首先我做了2个向量:一个有兴趣点(总共4个),另一个有基址。
points_of_interest <- c(
"berlin",
"paris",
"new york",
"madrid")
base_address <- "helsinki"
以下内容应计算每对points_of_interest和base_address之间的确切路线。共有4条路线:柏林 - 赫尔辛基,巴黎 - 赫尔辛基,纽约 - 赫尔辛基和马德里 - 赫尔辛基。
calculatedroutes1 <- route(from = base_address,
to = points_of_interest)
问题是我只获得柏林 - 赫尔辛基的路线,虽然我认为它应该被矢量化。
*替代2
由于route
似乎没有矢量化,我想也许我可以使用plyr。所以这是我的替代代码:
df.routes <- data.frame(points_of_interest,
rep(base_address, each = length(points_of_interest),
stringsAsFactors = FALSE)
df. calculatedroutes2 <- ddply(.data = df.routes,
.variables = .(points_of_interest, base_address),
.fun = route,
points_of_interest,
base_address)
对于points_of_interest和base_address的每个组合(所以对于所有4条路线)我想使用带有参数route
和from = points_of_interest
的函数to = base_address
。这会生成错误Error: unexpected ',' in "points_of_interest,
,但我认为这是在ddply中为函数添加参数的正确方法吗?
与我的other error route function类似的另一个问题仍然没有答案。
答案 0 :(得分:2)
查看route(...)
的代码(只在命令行输入“route”,不是?
或()
),此函数不向量化,虽然文档表明它是。
route(...)
使用Google Directions API,它采用单一来源和单个目的地。如果您在to=...
参数中传递了一个向量,route(...)
会创建一个网址向量,但只使用第一个。
解决此问题的一种方法是使用R:
中的Vectorize(...)
函数
rt <- Vectorize(route,vectorize.args=c("from","to"),SIMPLIFY=FALSE)
rt(base_address,points_of_interest)
对于points_of_interest
的定义,这也会失败,因为Google Directions支持三种交通方式:驾驶,自行车和步行,而这些都不会让您从赫尔辛基到纽约。如果您从兴趣点中删除new york
,则会获得包含从赫尔辛基到其他每个城市的路线的数据框列表。
答案 1 :(得分:1)
这会在“points_of_interest”中生成错误Error:unexpected','但我认为这是在ddply中为函数添加参数的正确方法吗?
我猜你应该把这些参数放在引号之间:
df. calculatedroutes2 <- ddply(.data = df.routes,
.variables = .(points_of_interest, base_address),
.fun = route,
"points_of_interest",
"base_address")