2017-07-16 90 views
0

我想在SpatialPolygonsDataFrame(info)上結合一個1000x1000m的SpatialPointsDataFrame(網格)來聚合每個網格正方形內所有點的信息。結合SpatialPointsDataFrame和SpatialPolygonsDataFrame錯誤:最大返回的密集矩陣大小超過

我試過代碼:

combined <- intersect(info, grid)

但我recive這個錯誤:

Error in RGEOSBinPredFunc(spgeom1, spgeom2, byid, func) : 
    rgeos_binpredfunc_prepared: maximum returned dense matrix size exceeded 

有anotherway做我想做什麼,或者解決錯誤?

回答

1

該錯誤表明您正在使您的記憶力最大化。一種解決方案是分解你的數據集,並做大塊相交。新的SF軟件包使得使用dplyr動詞變得更容易一些。添加一列來定義塊,然後嘗試以下操作:

combined <- info %>% 
    group_by(chuncks) %>% 
    do(sf::st_intersection(., grid)) 

爲了加快進程,你也可以嘗試拆分數據集中到chuncks的列表,然後應用st_intersection功能並行。這要快得多。

#import packages 
library(foreach) 
library(doParallel) 

#setup parallel backend to use 8 processors 
cl<-makeCluster(4) 
registerDoParallel(cl) 

tmp <- split(info, info$chunks) 

# run using foreach 
by.chunk <- foreach(df = tmp) %dopar% { 
    sf::st_intersection(df, grid) 
} 

# combine list of data.frames 
combined <- ldply(by.chunck