Thanks for the tip - this cleans up the code a lot! Unfortunately, there is no gain in speed.
remko On Thu, Jun 3, 2010 at 10:46 PM, nikhil kaza <nikhil.l...@gmail.com> wrote: > Reduce might work. Not sure about the speed advantages though. It does > simplify code. > > Unionall <- function(x) Reduce('union', x) > leaveout <- Unionall(leaves) > > > On Tue, Jun 1, 2010 at 9:53 PM, Remko Duursma <remkoduur...@gmail.com> > wrote: >> >> Dear R-helpers, >> >> thanks for yesterday's speeding-up tip. Here is my next query: >> >> I have lots of polygons (not necessarily convex ones, and they never >> have holes) given by x,y coordinates. >> >> I want to get the polygon that is the union of these polygons. This is >> my current method, but I am hoping there is a faster method (up to >> thousands of polygons, each with ca. 40 xy points). >> >> Example: >> >> library(gpclib) >> >> # A polygon >> leaf <- structure(c(0, 1, 12.9, 16.5, 18.8, 17, 16.8, 15.5, 12.1, 8.2, >> 6.3, 5, 2, 0, -1.5, -4.3, -6.6, -10.3, -14.8, -19.4, -22.2, -23.5, >> -22.2, -17.6, -7.8, 0, 0, -2.4, 2.8, 8.9, 19.9, 33.9, 34.8, 40.4, >> 49.7, 69.2, 77.4, 83.4, 91.4, 99, 92.8, 87.3, 81.2, 71.1, 57.6, >> 45.4, 39.2, 26, 15.6, 5.3, 0.6, 0), .Dim = c(26L, 2L), .Dimnames = list( >> NULL, c("X", "Y"))) >> >> # Lots of polygons: >> releaf <- >> function(leaf)cbind(leaf[,1]+rnorm(1,0,50),leaf[,2]+rnorm(1,0,50)) >> leaves <- replicate(500, releaf(leaf), simplify=FALSE) >> >> # Make into gpc.poly class: >> leaves <- lapply(leaves, as, "gpc.poly") >> >> # Make union ..... >> system.time({ >> leavesoutline <- union(leaves[[1]], leaves[[2]]) >> for(i in 3:length(leaves))leavesoutline <- union(leavesoutline, >> leaves[[i]]) >> }) >> # about 1sec here. >> >> # Check it: >> plot(leavesoutline) >> >> >> >> thanks! >> >> Remko >> >> >> ------------------------------------------------- >> Remko Duursma >> Research Lecturer >> >> Centre for Plants and the Environment >> University of Western Sydney >> Hawkesbury Campus >> Richmond NSW 2753 >> >> Dept of Biological Science >> Macquarie University >> North Ryde NSW 2109 >> Australia >> >> Mobile: +61 (0)422 096908 >> www.remkoduursma.com >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.