Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
322 views
in Technique[技术] by (71.8m points)

for loop - Read in all shapefiles in a directory in R into memory

I would like to read all shapefiles in a directory into the global environment However, when I get a list of files in my working directory, the list includes both .shp and .shp.xml files, the latter of which I do not want. My draft code reads both .shp and .shp.xml files. How can I prevent it from doing so?

Draft code follows:

library(maptools)

# get all files with the .shp extension from working directory
setwd("N:/Dropbox/_BonesFirst/139_Transit_Metros_Points_Subset_by_R")
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) {
  cat("now loading", shp, "...", '

')
  assign(shp, readOGR(shp)) 
                  }

EDIT: Problems seems to be in the readShapePoints. Either readOGR (from rgdal) or shapefile (from raster) work better.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Get all the files:

# replace with your folder name:
dir <- "c:/files/shpfiles"
ff <- list.files(dir, pattern="\.shp$", full.names=TRUE)

Now read them. Easiest with raster::shapefile. Do not use readShapefile (obsolete and incomplete)

library(raster)
# first file
shapefile(ff[1])

# all of them into a list
x <- lapply(ff, shapefile)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...