2016-11-24 26 views
2

我在R A大空间行的数据帧称为lines我想功能line2route适用于从stplanr器R并联的foreach空间数据

为了加快这一进程,我想打破档案成环并行运行它们。

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 \”的对象的分配对于类 \“SpatialLinesDataFrame \”;(数值,\“data.frame \”)不为真的对象中的@'数据'无效“, “类\”tbl \“的对象的赋值对于 中类'\ SpatialLinesDataFrame \”;(value, \“data.frame \”)不为真的@'data'无效, “分配一个类 \”da的对象ta.frame \“对类 \”SpatialLinesDataFrame \“中的对象的@'data'无效;是(value,\“data.frame \”)不是TRUE“)”

是否可以运行带有空间数据的foreach循环?我并不担心在最后重新加入数据,因为我可以在稍后分开进行。

回答

0

,我发现这个问题时,我有,我曾用在e.g一个dplyr一些功能空间数据框架:

[email protected] <- bind_cols([email protected], new_col) 

我相信dplyr将空间数据框(SP1 @数据)到tbl_df。为了解决这个问题,所有我需要做的就是:

[email protected] <- as.data.frame(bind_cols([email protected], new_col)) 

简而言之,你只需要确保您的所有数据@的都正常的数据帧,不tbl_df。