Цикл для чтения шейп-файлов с использованием readOGR - PullRequest
0 голосов
/ 08 мая 2018

У меня есть 500 файлов форм, содержащих данные точек (lon / lat) и буфер границы.

У меня также есть следующий код для чтения каждого шейп-файла, объединения его с буфером, вычисления некоторых значений, а затем добавления этих значений в столбец фрейма данных.

Вот мой код:

    path="/Users/fun/Drought shapefiles/"


 file.names <- list.files(path, pattern="*.shp", full.names=T, recursive=FALSE)

#Now automate this process:
for (m in 1:500){
    dsn=path

    ##Load the buffer and the map:
Buffer <- readOGR("/Users/fun/Degrees Buffer Projections", "Germania buffer 10km")
Map <- readOGR("/Users/fun/Drought shapefiles/", m)

#Now convert the map into a dataframe and intersect it:
over(Map,as(Buffer,"SpatialPolygons"))
nrow(Map)
pts = Shapefile[!is.na(over(Shapefile,as(Buffer,"SpatialPolygons"))),]
nrow(pts)
head(pts@data)
plot(pts)

#Calculate the mean drought value across the border, and assign to a column:
drought_values <- pts$pdsi_440
drought.data[[2]][[m]] <- mean(drought_values)
}

Мой вопрос относится к следующей строке кода:

Map <- readOGR("/Users/fun/Drought shapefiles/", m)

Кажется, я не написал правильный код здесь, чтобы просмотреть 500 файлов. Что я делаю неправильно.

Для справки, файлы имеют следующие имена:

cru_drought_86_shape.shp
cru_drought_87_shape.shp
cru_drought_88_shape.shp

И так далее ...

Если вы хотите увидеть два шейп-файла, вот они: Засуха 303 Засуха 304

1 Ответ

0 голосов
/ 17 июня 2018

Проблема в том, что в цикле for вы передаете число от 1: 500 (м). Если вы хотите сделать это, вам нужно использовать число для индексации списка имен файлов. Поскольку вы использовали аргумент full.names = T, вы просто передаете полное имя файла:

 file.names <- list.files(path, pattern="*.shp", full.names=T, recursive=FALSE)

for (m in 1:500){
Map <- readOGR(file.names[m])
}
...