Объединение SpatialPointsDataFrame с ошибкой SpatialPolygonsDataFrame: превышен максимальный размер возвращаемой плотной матрицы
Я пытаюсь объединить SpatialPointsDataFrame (сетка) из квадратов 1000x1000 м над SpatialPolygonsDataFrame (информация), чтобы собрать всю информацию о точках в каждом квадрате сетки.
Я попробовал код:
combined <- intersect(info, grid)
Но я получаю эту ошибку:
Error in RGEOSBinPredFunc(spgeom1, spgeom2, byid, func) :
rgeos_binpredfunc_prepared: maximum returned dense matrix size exceeded
Есть ли другой способ сделать то, что я хочу или устранить ошибку?
1 ответ
Ошибка указывает на то, что вы исчерпали свою память. Одно из решений состоит в том, чтобы разбить ваш набор данных и сделать пересечение кусками. Новый 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