【发布时间】:2016-11-24 17:37:17
【问题描述】:
我在 R 中有一个名为 lines 的大型空间线数据框,我想将函数 line2route 应用于 stplanr
为了加快进程,我想将文件分成块并并行运行。
library(doParallel)
batch_size <- ceiling(nrow(lines) / 6)
cl <- makeCluster(6)
registerDoParallel(cl)
foreach(i = 1:6) %dopar% {
l_start <- as.integer(1 + (i - 1) * batch_size)
if(i * batch_size < nrow(lines)){
l_fin <- as.integer(i * batch_size)
}else{
l_fin <- as.integer(nrow(lines))
}
lines_sub <- lines[c(l_start:l_fin),]
rq <- line2route(l = lines_sub, route_fun = route_cyclestreet, plan = "quietest")
saveRDS(rq, file = paste0("../temp/rq_batch_", i, ".Rds"))
}
代码将lines分成6个部分并运行函数,然后保存结果。
这在 for 循环中运行良好,但是当我将其更改为 foreach 循环并尝试并行执行时,我收到错误消息
{ 中的错误:任务 1 失败 - "c(" 类对象的分配 \"tbl_df\" 对类对象中的 @'data' 无效 \"空间线数据帧\"; is(value, \"data.frame\") 不是 TRUE", “类 \"tbl\" 对象的赋值对 @'data' 无效 类 \"SpatialLinesDataFrame\" 的对象;是(值, \"data.frame\") is not TRUE", "assignment of an object of class \"data.frame\" 对类对象中的 @'data' 无效 \"空间线数据帧\"; is(value, \"data.frame\") is not TRUE")"
是否可以使用空间数据运行 foreach 循环?我不担心最后重新加入数据,因为我可以稍后单独执行。
【问题讨论】:
标签: r dataframe parallel-processing spatial