Процесс из памяти с помощью ms_simplify() в R

#r #memory #mapping #sf

Вопрос:

Я использую пакеты sf и rmapshaper для выполнения некоторых сопоставлений в R, но у меня заканчивается память из-за размера данных. Пока я работал над французскими департаментами (меньшие данные), это работало хорошо, но теперь я работаю над французскими городами, и при выполнении функции ms_simplify() я получаю следующую ошибку :

V8 ФАТАЛЬНАЯ ОШИБКА В НОВОМ МАССИВЕ: сбой выделения — процесс исчерпал память

Это фатальная ошибка, из-за которой сеанс R прерывается.

Данные, которые я использую, находятся по следующей ссылке : https://www.data.gouv.fr/fr/datasets/r/a01aff2a-8f36-4a77-a73f-efc212fe2899

код, который я выполнил, выглядит следующим образом :

 library(sf)
library(rmapshaper)
shp.city.sf <- read_sf("communes-20200101-shp/communes-20200101.shp")
shp2 <- ms_simplify(shp.city.sf) #, sys_mem=12)
 

Я видел похожие вопросы, на которые были даны ответы путем увеличения размера памяти, но когда я использую аргумент «sys_mem» функции ms_simplify (), я получаю ту же ошибку (я попробовал sys_mem=12)

Комментарии:

1. Привет! Есть ли какая-то особая причина, по которой вы не использовали st_simplify вместо ms_simplify этого ? Я попробовал запустить st_simplify(shp2, dTolerance = 100) , и это работает без каких-либо особых проблем, но я не уверен в различиях между st_simplify и ms_simplify .

2. Привет! Я в основном изучал этот метод в школе, с пакетом RGDAL, а не sf, и мы учились с ms_simplify. Я не знал о другом ! я могу попробовать и скажу вам, если проблема все еще существует ! Спасибо!

3. Раздел 5.2.1 этой книги geocompr.robinlovelace.net/geometric-operations.html объясняет различия между bw st_simplify() и ms_simplify() . ms_simplify() похоже, что он работает с каждым объектом в коллекции по отношению к его соседям и гарантирует, что при упрощении между соседними полигонами не образуется отверстий/перекрытий, но st_simplify() работает с каждым объектом отдельно, поэтому могут возникнуть неожиданные результаты. Я предполагаю, что это связано с тем, что отдельные операции st_simplify() могут работать с коллекциями различной геометрии, но ms_simplify() не могут.

4. Я бы предположил, что ms_simplify() это более обременительно для памяти, поскольку оно должно обрабатывать все функции сразу, в то st_simplify() время как может обрабатывать их несколько отдельно?