2016-11-24 58 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。