10 Sep 2013

Loading Multiple Shapefiles to the R-Console Simultaneously

A quick tip on how to load multiple shapefiles (point shapefiles, i.e.) to the R console in one go:


# get all files with the .shp extension from working directory 

shps <- dir(getwd(), "*.shp")

# the assign function will take the string representing shp and turn it into a variable
# which holds the spatial points data
for (shp in shps) assign(shp, readShapePoints(shp))
plot(get(shp[1])) # i.e.
# ...done


  1. Thanks to the anonymous commentator that pointed out that it is maptools package that needs to be loaded! (I accidentally deleted the comment.. sry)

  2. rgdal::readOGR() works almost the same, but you need to strip the '.shp' from the end of the filenames:
    shps <- dir(getwd(), "*.shp")
    shps <- sub(shps,'\\.shp$')
    for (shp in shps) assign(shp, readOGR('.',layer=shp))

    You could, of course, replace the for (shp in shps) loop with lapply(), but this is one of the cases where a loop is as fast as a *apply() function.

    1. Hi Tom,
      You're right readOGR actually is a better choice because it reads the projection, if there is one assigned to the shapefile (.prj-file). I'm no orthodox lapply follower, and, as you said, it is not faster or better than
      the for-loop here.
      Regards, Kay

    2. This line is formed incorrectly I think:

      shps <- sub(shps,'\\.shp$')

      It should be

      shps <- sub(\\.shp$', "", shps)