Combining SpatialPointsDataFrame with SpatialPolygonsDataFrame error: maximum returned dense matrix size exceeded

Combining SpatialPointsDataFrame with SpatialPolygonsDataFrame error: maximum returned dense matrix size exceeded

我正在尝试将 1000x1000 米正方形的 SpatialPointsDataFrame(网格)组合到 SpatialPolygonsDataFrame(信息)上,以聚合每个网格正方形内点的所有信息。

我试过代码:

combined <- intersect(info, grid)

但是我收到这个错误:

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

是否有其他方法可以做我想做的或解决错误?

该错误表明您正在用尽内存。一种解决方案是分解数据集并分块进行交叉。新的 SF 包使使用 dplyr 动词更容易做到这一点。添加一列来定义您的块,然后尝试以下操作:

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

为了加快这个过程,您还可以尝试将您的数据集拆分成一个块列表,然后并行应用 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