结合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