结合SpatialPointsDataFrame和SpatialPolygonsDataFrame错误:最大返回的密集矩阵大小超过

问题描述:

我想在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做我想做什么,或者解决错误?

该错误表明您正在使您的记忆力最大化。一种解决方案是分解你的数据集,并做大块相交。新的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