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
我正在尝试将 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