Question

I need to work with several shapefiles in a project in R.

Therefore i would like to iterate the readOGR function to load these files in a list. Later I can use plyr or construct a loop to do the same operation on every shapefile in the list.

here is a minimum reproducible example:

library("rgdal")

setwd("your.path.here")
download.file("http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_countries.zip","ne_10m_admin_0_countries.zip")

unzip("ne_10m_admin_0_countries.zip")

# works like this:
my.shapefile<-readOGR("your.path.here","ne_10m_admin_0_countries")
plot(my.shapefile)

# does not work like this
shapefile.list<-list(length=20)
shapefile.list[1]<-readOGR("your.path.here","ne_10m_admin_0_countries")

plot(shapefile.list[1])

Error message is

Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' is a list, but does not have components 'x' and 'y'
Était-ce utile?

La solution

Single square brackets are for subsetting lists. Double square brackets are for getting and setting elements of lists.

So use double square brackets. Demo:

> a=list(1,2,3,4)

a[2] is a list with one element:

> a[2]
[[1]]
[1] 2

a[[2]] is just that element:

> a[[2]]
[1] 2
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top