R-矢量化JSON调用
使用Mapquest directions API在R中使用ggplot2绘制数千条路线 基本代码理论:有一个结束位置列表和一个开始位置列表。对于每个终端位置,对fromJSON的调用从Mapquest返回路由坐标。在此基础上,我们已经将坐标分配(在列表中读取为列表)矢量化到ggplot2的geom_路径geom 现在,在约1200条记录的位置集上运行此操作需要约4分钟。我很想把它弄下来。关于如何矢量化对fromJSON(返回列表)的调用有何想法 Windows 7,64位,R2.14.2 库:plyr、ggplot2、rjson、mapproj、XMLR-矢量化JSON调用,json,r,ggplot2,Json,R,Ggplot2,使用Mapquest directions API在R中使用ggplot2绘制数千条路线 基本代码理论:有一个结束位置列表和一个开始位置列表。对于每个终端位置,对fromJSON的调用从Mapquest返回路由坐标。在此基础上,我们已经将坐标分配(在列表中读取为列表)矢量化到ggplot2的geom_路径geom 现在,在约1200条记录的位置集上运行此操作需要约4分钟。我很想把它弄下来。关于如何矢量化对fromJSON(返回列表)的调用有何想法 Windows 7,64位,R2.14.2 库:
k = 0
start_loc = "263+NORTH+CENTER+ST.,+MESA+ARIZ."
end_loc = funder_trunc[,length(funder_trunc)]
route_urls = paste(mapquest_baseurl, "&from=", start_loc, "&to=", end_loc, "&ambiguities=ignore", sep="")
for (n in route_urls) {
route_legs = fromJSON(file = url(n))$route$legs[[1]]$maneuvers
lats = unlist(lapply(route_legs, function(x) return(x$startPoint[[2]])))
lngs = unlist(lapply(route_legs, function(x) return(x$startPoint[[1]])))
frame = data.frame(cbind(lngs, lats))
path_added = geom_path(aes(lngs, lats), data = frame)
p = p + path_added
k = k + 1
print(paste("Processed ", k, " of ", nrow(funder_trunc), " records in set.", sep=""))
}
因为我没有使用
rjson
或mapproj
,所以我在这里冒险,但似乎给服务器打了几千次电话才是真正的罪魁祸首。如果mapquest服务器没有允许您一次性发送多个请求的API,那么您就有麻烦了。如果有,那么您需要了解如何使用/修改rjson
和/或mapproj
来调用它
正如@Chase所说,您可能可以并行调用它,但服务器不喜欢从同一个客户机获得太多并行请求——它可能会禁止您。顺便说一句,它甚至可能不喜欢从同一个客户端快速连续地收到数千个串行请求,但显然您当前的代码工作正常,所以我想它不介意。库(并行)
和合适的后端?