On Thu, 17 Jan 2013, Emanuele Cordano wrote:

Dear all,

I have a list of SpatialPolygons-class objects containing only one polygon for each list element. How can we gather each SpatialPolygons-class objects list element in only one SpatialPolygons-class object without using a 'for' loop?

These are the *apply functions - here first making your input object:

library(sp)
grd <- GridTopology(c(0.5, 0.5), c(1, 1), c(6, 6))
Spol <- as(grd, "SpatialPolygons")
list_of_SPolsu <- lapply(slot(Spol, "polygons"), function(x)
  SpatialPolygons(list(x)))
list_of_SPols <- lapply(slot(Spol, "polygons"), function(x) {
  Pol <- x
  slot(Pol, "ID") <- "1"
  SpatialPolygons(list(Pol))
})

which also messes things up by giving all the Polygons objects the same ID - if all your IDs are known to be unique, you can simplify from:

IDs <- sapply(list_of_SPols, function(x)
  slot(slot(x, "polygons")[[1]], "ID"))
length(unique(IDs)) == length(list_of_SPols)

Spol1 <- SpatialPolygons(lapply(1:length(list_of_SPols), function(i) {
  Pol <- slot(list_of_SPols[[i]], "polygons")[[1]]
  slot(Pol, "ID") <- as.character(i)
  Pol
}))

giving a sequence of new IDs, to:

IDsu <- sapply(list_of_SPolsu, function(x)
  slot(slot(x, "polygons")[[1]], "ID"))
length(unique(IDsu)) == length(list_of_SPolsu)

Spol2 <- SpatialPolygons(lapply(list_of_SPolsu,
  function(x) slot(x, "polygons")[[1]]))

When the input IDs are unique, you can also use them to help you order and add the data.frame in the next step.

You can also use the names of list components:

set.seed(1)
IDs <- sample(c(LETTERS, letters), 36)
names(list_of_SPols) <- IDs
Spol3 <- SpatialPolygons(lapply(1:length(list_of_SPols), function(i) {
  Pol <- slot(list_of_SPols[[i]], "polygons")[[1]]
  slot(Pol, "ID") <- names(list_of_SPols)[i]
  Pol
}))

if that is more convenient, provided that they are unique.

Checking:

row.names(Spol)
row.names(Spol1)
row.names(Spol2)
row.names(Spol3)

Hope this helps,

Roger


Our final target is to have this information in only one SpatialPolygonsDataFrame-class which can easily created from one SpatialPolygons-class object.

Regards
Thank you

Emanuele Cordano
_______________________________________________
R-sig-Geo mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo


--
Roger Bivand
Department of Economics, NHH Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: [email protected]

_______________________________________________
R-sig-Geo mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to