Работа с большими шейп-файлами на R - PullRequest
0 голосов
/ 08 июня 2011

Добрый день: Я некоторое время изучал R, однако сейчас я работаю с большими шейп-файлами, размер этих файлов превышает 600 Мб. У меня есть компьютер с 200 ГБ свободной и 12 ГБ в оперативной памяти, я хочу спросить, знает ли кто-нибудь, как обращаться с этими файлами ?. Я очень ценю вашу помощь.

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

С последней версией 64-битной R и последней версией rgdal просто попробуйте прочитать ее на:

library(rgdal)
shpdata <- readOGR("/path/to/shpfolder/", "shpfilename")

Где "shpfilename" - это имя файла без расширения.

Если это не помогло, обновите свой вопрос, указав подробную информацию о том, что вы сделали, что вы видели, информацию о размерах файлов - каждый из файлов «shpfilename. *», Сведения о вашей версии R, операционной системе и версии rgdal.

1 голос
/ 11 июня 2015

Хорошо, поэтому вопрос скорее в стратегии для работы с большими файлами, а не в том, «как прочитать шейп-файл в R».

Этот пост показывает, как можно использовать подход «разделяй-применяй-рекомбинируй» в качестве решения путем подстановки шейп-файлов.

Исходя из текущего ответа, предположим, что у вас есть SpatialPolygonsDataFrame с именем shpdata. shpdata будет иметь атрибут данных (доступ через @data) с каким-то идентификатором для каждого полигона (для шейп-файлов Tiger это обычно что-то вроде 'GEOID'). Затем вы можете циклически перебирать эти идентификаторы в группах и размещать / обрабатывать / экспортировать shpdata для каждой небольшой группы полигонов. Я предлагаю либо записать промежуточные файлы в формате .csv, либо вставить их в базу данных, например, sqlite.

Пример кода

library(rgdal)
shpdata <- readOGR("/path/to/shpfolder/", "shpfilename")

# assuming the geo id var is 'geo_id'
lapply(unique(shpdata@data$geo_id), function(id_var){
   shp_sub = subset(shpdata, geo_id == id_var)
   ### do something to the shapefile subset here ###
   ### output results here ###

   ### clean up memory !!! ###
   rm(shp_sub)
   gc()
})
...