Объединение 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
Другие вопросы по тегам