Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计数距离太长_R_For Loop_Geosphere - Fatal编程技术网

R 计数距离太长

R 计数距离太长,r,for-loop,geosphere,R,For Loop,Geosphere,我有一个超过1000万行的数据帧。 我想计算lat-lon对之间的距离,并将它们添加到nem列中。 我已经尝试运行脚本(见下文),但它花费的时间太长(超过5个小时)。 有什么技巧可以提高这个过程的速度吗?我使用geosphere包计算lat-lon对之间的距离 for (i in seq_len(nrow(dm_kekk))) { dm_kekk$dist[i]<-distm (c(dm_kekk$lon[i], dm_kekk$lat[i]),

我有一个超过1000万行的数据帧。 我想计算lat-lon对之间的距离,并将它们添加到nem列中。 我已经尝试运行脚本(见下文),但它花费的时间太长(超过5个小时)。 有什么技巧可以提高这个过程的速度吗?我使用geosphere包计算lat-lon对之间的距离

for (i in seq_len(nrow(dm_kekk)))
{
dm_kekk$dist[i]<-distm (c(dm_kekk$lon[i], dm_kekk$lat[i]), 
                         c(dm_kekk$lon_ok[i], dm_kekk$lat_ok[i]), 
                         fun = distHaversine)

}
for(i在seq_len(nrow(dm_kekk))中)
{

dm_kekk$dist[i]总是给出一些数据和输出的示例,以使回答问题更容易一些。 一种选择是,您只需并行处理或尝试使用
dplyr
mutate

library(doParallel)
cores <- detectCores() -1
cl <- makeCluster(cores)
registerDoParallel(cl)

oper_dist <- foreach(i=1:seq_len(nrow(dm_kekk))) %dopar% {
library(geosphere)
  distm (c(dm_kekk$lon[i], dm_kekk$lat[i]), 
                     c(dm_kekk$lon_ok[i], dm_kekk$lat_ok[i]), 
                     fun = distHaversine)
}
stopCluster(cl)
dm_kekk$dist <- do.call(c, oper_dist)

谢谢你的回答。dplyr方式给出了一个错误,所以正确的代码看起来像:
mutate(dist=distm(cbind(lon,lat),cbind(lon_ok,lat_ok,fun=distHaversine))
.HI@deaux,如果解决方案有效,您能将问题标记为正确吗?此外,您是否进行了基准测试以找出哪种解决方案是最佳的?HI@Hanjo Jo'burg Odendaal!dplyr方法比并行方法快得多。但是distm的语法不正确。正确的代码看起来像:
mutate(dist=distm(cbind(lon,lat),cbind(lon_-ok,lat_-ok,fun=distHaversine))
library(dplyr)

dm_kekk %>% mutate(dist = distm(lon, lat, lon_ok, lat_ok, fun = distHaversine))