On 23/07/16 05:00, Bacou, Melanie wrote: > Thanks! I wonder why the original syntax passing a list used to work (I > believe).
It shouldn't have worked: > rbind(list(1,2,3)) [,1] [,2] [,3] [1,] 1 2 3 > rbind(1,2,3) [,1] [1,] 1 [2,] 2 [3,] 3 > > For a much longer (and unknown) list of SpatialPolygonsDataFrames could > an approach using do.call() work instead? I tried but: > > > m <- do.call(rbind, m, makeUniqueIDs=T) > Error in do.call(rbind, m, makeUniqueIDs = T) : > unused argument (makeUniqueIDs = T) See Rolf's email for the correct way of using do.call; with sp from CRAN it still doesn't work. As an alternative to installing sp from github directly, you could source the relevant rbind methods from github in your script: rbind.SpatialPolygons = function(..., makeUniqueIDs = FALSE) { dots = list(...) names(dots) <- NULL stopifnot(identicalCRS(dots)) # checkIDSclash(dots) pl = do.call(c, lapply(dots, function(x) slot(x, "polygons"))) if (makeUniqueIDs) pl = makeUniqueIDs(pl) SpatialPolygons(pl, proj4string = CRS(proj4string(dots[[1]]))) } rbind.SpatialPolygonsDataFrame <- function(..., makeUniqueIDs = TRUE) { dots = list(...) names(dots) <- NULL # bugfix Clement Calenge 100417 lst = lapply(dots, function(x) as(x, "SpatialPolygons")) lst$makeUniqueIDs = makeUniqueIDs pl = do.call(rbind.SpatialPolygons, lst) df = do.call(rbind, lapply(dots, function(x) x@data)) SpatialPolygonsDataFrame(pl, df, match.ID = FALSE) } > > # This works though but takes an extra step > > spChFIDs(m[[1]]) <- paste0("A", seq(length(m[[1]]))) > > spChFIDs(m[[2]]) <- paste0("B", seq(length(m[[2]]))) > > spChFIDs(m[[3]]) <- paste0("C", seq(length(m[[3]]))) > > m <- do.call(rbind, m) > > class(m) > [1] "SpatialPolygonsDataFrame" > attr(,"package") > [1] "sp" > > --Mel. > > On 7/22/2016 5:53 PM, Edzer Pebesma wrote: >> The correct call to rbind would be >> >> mm = rbind(m[[1]], m[[2]], m[[3]], makeUniqueIDs=T) >> >> with sp on CRAN this doesn't work; with the version on github it does. >> >> An alternative with sp from CRAN is to make the IDs unique by hand: >> >> spChFIDs(m[[1]]) <- paste0("A", seq(length(m[[1]]))) >> spChFIDs(m[[2]]) <- paste0("B", seq(length(m[[2]]))) >> spChFIDs(m[[3]]) <- paste0("C", seq(length(m[[3]]))) >> mm = rbind(m[[1]], m[[2]], m[[3]]) >> >> >> On 22/07/16 22:55, Bacou, Melanie wrote: >>> Hi, >>> I'm getting weird results trying to rbind a list of >>> SpatialPolygonsDataFrames with R 3.2.1 and raster 2.5.8. I believe the >>> code below used to merge all 3 country boundaries, but instead I now get >>> a list with 6 elements (incl. 3 logical TRUE). Am I doing something wrong? >>> >>> Thx, --Mel. >>> >>>> library(raster) >>>> m <- lapply(c("TZA", "UGA", "GHA"), function(x) getData("GADM", >>> country=x, level=1)) >>>> m <- rbind(m, makeUniqueIDs=T) >>>> sapply(m, class) >>> [1] "SpatialPolygonsDataFrame" "logical" "SpatialPolygonsDataFrame" >>> [4] "logical" "SpatialPolygonsDataFrame" "logical" >>> >>>> sessionInfo() >>> R version 3.2.1 (2015-06-18) >>> Platform: x86_64-w64-mingw32/x64 (64-bit) >>> Running under: Windows 7 x64 (build 7601) Service Pack 1 >>> >>> locale: >>> [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United >>> States.1252 >>> [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C >>> [5] LC_TIME=English_United States.1252 >>> >>> attached base packages: >>> [1] stats graphics grDevices utils datasets methods base >>> >>> other attached packages: >>> [1] raster_2.5-8 sp_1.2-3 rj_2.0.5-2 >>> >>> loaded via a namespace (and not attached): >>> [1] rj.gd_2.0.0-1 Rcpp_0.12.6 grid_3.2.1 lattice_0.20-33 >>> >> >> >> _______________________________________________ >> R-sig-Geo mailing list >> R-sig-Geo@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-sig-geo > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-sig-Geo mailing list > R-sig-Geo@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-sig-geo > -- Edzer Pebesma Institute for Geoinformatics (ifgi), University of Münster Heisenbergstraße 2, 48149 Münster, Germany; +49 251 83 33081 Journal of Statistical Software: http://www.jstatsoft.org/ Computers & Geosciences: http://elsevier.com/locate/cageo/ Spatial Statistics Society http://www.spatialstatistics.info
signature.asc
Description: OpenPGP digital signature
_______________________________________________ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo