Skip to content

rbind problems with SpatialPolygonsDataFrame

5 messages · Adam Sparks, Jonathan Greenberg, Tom Gottfried +1 more

#
R-sig-geo'ers:

I apologize that I can't provide the input data, but maybe the info
below can illuminate the problem.  Basically, I'm trying to rbind two
SpatialPolygonDataFrames together, but I'm getting a strange error:

'no method or default for coercing "logical" to "SpatialPolygons"'

Does rbind only work on SpatialPolygons (e.g. should I rbind the
SpatialPolygons and the data.frame separately, then piece them back
together afterwards?)

Note the "replacement" call was because I couldn't figure out how to
do.call(rbind) and pass along the "makeUniqueIDs=TRUE"
Error in as(x, "SpatialPolygons") :
  no method or default for coercing "logical" to "SpatialPolygons"
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"

This was a single step from a larger looping I used in lieu of do.call:
for(i in (1:length(boundary_vectors_unmerged)))
	{
		print(i)
		if(i==1)
		{
			boundary_vectors=boundary_vectors_unmerged[[i]]
		} else
		{
			boundary_vectors=rbind(boundary_vectors,boundary_vectors_unmerged[[i]],makeUniqueIDs=TRUE)
		}
	}


--j
#
I tried that, but is there an equivalent of makeUniqueIDs=TRUE for
that command?  I get this error when running spRbind:

Error in spRbind(as(obj, "SpatialPolygons"), as(x, "SpatialPolygons")) :
  non-unique polygon IDs

--j
On Tue, Sep 13, 2011 at 5:17 PM, Adam Sparks <adamhsparks at gmail.com> wrote:

  
    
#
see the "Note" section in ?rbind.SpatialPolygonsDataFrame! Though this 
does not seem to explain the first error you mentioned. Here a 
reproducable example would be very helpful to trace the error.

Tom

Am 14.09.2011 03:33, schrieb Jonathan Greenberg:

  
    
#
On Tue, 13 Sep 2011, Jonathan Greenberg wrote:

            
There is no equivalent by design. The IDs are what are used to match the 
geometries with the rows of the attribute data (if any), so cannot be 
arbitrary. The user should assign suitable valyes first, it isn't hard, 
just imposes necessary discipline.

In your case I would never extend the list of Polygons objects as you do - 
I would always first count the total number of Polygons objects in the 
list of SpatialPolygons* objects, create a list of the correct length, 
create and assign unique IDs to the input list components, assign to the 
new list, and only then build the output SpatialPolygons* object. This 
avoids the wasteful reallocation of memory each time round the loop.

Hope this clarifies,

Roger