[R-sig-Geo] IDvar argument to readShapeLines

Jim Regetz regetz at nceas.ucsb.edu
Fri May 1 09:05:33 CEST 2009

I'm curious why the maptools functions readShapeLines and 
readShapePoints don't take an IDvar argument, even though their internal 
counterparts .shp2LinesDF and .Map2SPDF do? It appears only 
readShapePoly supports custom IDs in the wrapper function.

For lines, I realize I can change the FIDs afterwards using spChFIDs(). 
However, I have found that this doesn't scale well, with processing time 
seemingly O(n^2) with the number of features. It would thus be useful to 
be able to set custom IDs when the data is read in, as this is faster.

As an example, I recently used spChFIDs on a SpatialLinesDataFrame with 
~70000 features, and after 90 minutes it still hadn't completed (I gave 
up :). In contrast, I mimicked the internal code of readShapeLines with 
an added tweak to set IDs, and it took only 2.5 minutes to read the data 
and assign the IDs I specified:

map <- suppressWarnings(read.shape("foo.shp"))
lyr <- suppressWarnings(maptools:::.shp2LinesDF(map,

Is there any reason why this might be a bad idea, in general?

Incidentally, my ultimate goal is to read in several such largish 
shapefiles (all with identical attributes) and spRbind them. So in fact 
I don't care so much *what* the IDs are, just that they be unique across 
all the layers so that rbind/spRbind will work. Should I be using a 
different approach altogether (sticking with R-based solutions)?


James Regetz, Ph.D.
Scientific Programmer/Analyst
National Center for Ecological Analysis & Synthesis
735 State St, Ste 300
Santa Barbara, CA 93101

More information about the R-sig-Geo mailing list