Thiago, I forgot to mention that you may be able to further speed things up by processing the data in bigger chunks, using
setOptions(chunksize= ) The default setting is somewhat conservative, to avoid errors from occurring, but if you want to live in the fast lane, give it a try. Also, Matteo pointed out to me that calc(x, sum) also uses rowSums; so speed should be equivalent for sum and calc. calc has the advantage of being able to set a filename. Robert On Sun, May 13, 2012 at 9:03 AM, Robert J. Hijmans <r.hijm...@gmail.com>wrote: > sum should be faster than calc(x, sum) because sum uses rowSums whereas > calc, in this case, would call apply(values(x), 1, sum). calc(x, > function(i) rowSums(i)) should be equivalent to sum (in speed and results). > > Whether making a RasterBrick is worth it depends on how many times you > will use these files for this type of computation. If it is only for one > computation it should be slower to first make bricks, as the main > bottleneck in these computations is disk I/O. I cannot think of another way > to speed things up right now --- something we are working through > clustering (probably not too helpful here), and C routines. > > 30 hours is long, but it is the computer that's working, not you. > > Robert > > > On Sun, May 13, 2012 at 4:46 AM, Matteo Mattiuzzi < > matteo.mattiu...@boku.ac.at> wrote: > >> Dear Thiago, >> >> I don't know what makes sum() more suitable comparing to calc() but I >> think a fakt that you are useing a stack (and not a brick) influences also >> the speed of processing: >> >> ###################### >> library(raster) >> r <- raster() >> r[] <- 1:ncell(r) >> >> setOptions(todisk=TRUE) >> system.time(st <- stack(r,r,r,r,r,r,r,r,r)) >> system.time(br <- brick(r,r,r,r,r,r,r,r,r)) >> >> system.time(sum(st,na.rm=FALSE)) >> system.time(sum(br,na.rm=FALSE)) >> >> system.time(calc(st,sum,na.rm=FALSE)) >> system.time(calc(br,sum,na.rm=FALSE)) >> >> setOptions(todisk=FALSE) >> ####################### >> >> # Of coarse the creation of a brick takes a bit of time since the data >> needs to be re-organised physically on the disk. >> # But this initial overhead worthwhile relatively quickly, you have to >> check this. >> >> # Cheers Matteo >> >> >> >> >> >>> Thiago Veloso 13.05.12 1.53 Uhr >>> >> Robert, >> Thanks for your input. Your suggestion is more suitable to my case, but >> it takes almost one hour to sum a stack containing 46 satellite images. >> Please see below: >> > sclass : RasterStack dimensions : 5568, 8289, 46153152, 46 >> (nrow, ncol, ncell, nlayers)resolution : 0.00898, 0.00898 (x, y)extent >> : -104.4326, -29.99736, -40.00064, 10 (xmin, xmax, ymin, ymax)coord. >> ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 min >> values : -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, >> -32768, -32768, -32768, -32768, -32768, -32768, -32768, ... max values : >> 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, >> 32767, 32767, 32767, 32767, 32767, ... layer names : gpp2004001.Gpp_1km, >> gpp2004009.Gpp_1km, gpp2004017.Gpp_1km, gpp2004025.Gpp_1km, >> gpp2004033.Gpp_1km, gpp2004041.Gpp_1km, gpp2004049.Gpp_1km, >> gpp2004057.Gpp_1km, gpp2004065.Gpp_1km, gpp2004073.Gpp_1km, >> gpp2004081.Gpp_1km, gpp2004089.Gpp_1km, gpp2004097.Gpp_1km, >> gpp2004105.Gpp_1km, gpp2004113.Gpp_1km, ... >> For reference, total size of the 46 images which compose the stack >> reaches 4GB. Here is how long it takes to perform the sum over the stack: >> > system.time(sos <- sum(s,na.rm=FALSE)) user system elapsed >> 743.098 31.258 3104.113 >> The machine I am using to process this dataset is an 3GHz quadcore with >> 16GB of RAM, running Opensuse and latest R (2.15.0). >> As processing my entire data involves performing this operation at least >> 30 times, is there a way to optimize the process? >> All the best, Thiago. >> --- On Sat, 12/5/12, Robert J. Hijmans wrote: >> >> From: Robert J. Hijmans >> Subject: Re: [R-sig-Geo] Antw: Error when using rowSums along with a >> RasterStack object >> To: thi_vel...@yahoo.com.br >> Cc: r-sig-geo@r-project.org >> Date: Saturday, 12 May, 2012, 13:43 >> >> You can also do >> sos <- sum(s, na.rm=FALSE) >> Best, Robert >> >> >> On Sat, May 12, 2012 at 2:26 AM, Matteo Mattiuzzi wrote: >> >> Dear Thiago, >> >> >> >> is this what you need? >> >> #### >> >> library(raster) >> >> r <- raster() >> >> r[]<-1:ncell(r) >> >> r2 <- raster() >> >> r2[]<-ncell(r):1 >> >> r <-brick(r,r2) >> >> plot(r) >> >> >> >> sos <- calc(r,sum) >> >> x11() >> >> plot(sos) >> >> #### >> >> Matteo >> >> >> >> sos <- calc(r,sum) >> >> plot(sos) >> >> >> >> >>> Thiago Veloso 11.05.12 23.29 Uhr >>> >> >> Dear R-colleagues, >> >> >> >> I am trying to sum all layers of a RasterStack object, which is >> summarized below: >> >> >> >> > s >> >> class : RasterStack >> >> dimensions : 5568, 8289, 46153152, 46 (nrow, ncol, ncell, nlayers) >> >> resolution : 0.00898, 0.00898 (x, y) >> >> extent : -104.4326, -29.99736, -40.00064, 10 (xmin, xmax, ymin, >> ymax) >> >> coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 >> +towgs84=0,0,0 >> >> min values : -32768, -32768, -32768, -32768, -32768, -32768, -32768, >> -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, ... >> >> max values : 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, >> 32767, 32767, 32767, 32767, 32767, 32767, 32767, ... >> >> layer names : gpp2004001.Gpp_1km, gpp2004009.Gpp_1km, gpp2004017.Gpp_1km, >> gpp2004025.Gpp_1km, gpp2004033.Gpp_1km, gpp2004041.Gpp_1km, >> gpp2004049.Gpp_1km, gpp2004057.Gpp_1km, gpp2004065.Gpp_1km, >> gpp2004073.Gpp_1km, gpp2004081.Gpp_1km, gpp2004089.Gpp_1km, >> gpp2004097.Gpp_1km, gpp2004105.Gpp_1km, gpp2004113.Gpp_1km, ... >> >> >> >> >> The raster 's' is composed by 46 satellite images at a resolution of 1km >> (0.00898degree). Each layer is a 8-day composition of leaf area index and I >> need to integrate an entire year of LAI. When I try to run the "rowSums" >> function in this RasterStack, the following error is displayed: >> >> >> >> >> > sos <- rowSums(s,na.rm=FALSE) >> >> Error in rowSums(s, na.rm = FALSE) : >> >> 'x' must be an array of at least two dimensions >> >> >> >> The same occurs when I try to use .rowSums providing matrix dimensions: >> >> >> >> > sos <- .rowSums(s,5568,8289) >> >> Error in .rowSums(s, 5568, 8289) : 'x' must be numeric >> >> >> >> >> >> What am I doing wrong? Is there another way to integrate the layers of a >> RasterStack object? >> >> >> >> Thanks in advance, >> >> Thiago Veloso. >> >> >> >> P.S.: Attaching sessionInfo output to provide useful information: >> >> >> >> > sessionInfo() >> >> R version 2.15.0 (2012-03-30) >> >> Platform: x86_64-unknown-linux-gnu (64-bit) >> >> >> >> locale: >> >> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C >> >> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 >> >> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 >> >> [7] LC_PAPER=C LC_NAME=C >> >> [9] LC_ADDRESS=C LC_TELEPHONE=C >> >> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C >> >> >> >> attached base packages: >> >> [1] stats graphics grDevices utils datasets methods base >> >> >> >> other attached packages: >> >> [1] ncdf_1.6.6 rgdal_0.7-11 raster_1.9-92 sp_0.9-99 >> >> >> >> loaded via a namespace (and not attached): >> >> [1] grid_2.15.0 lattice_0.20-6 >> >> >> >> >> >> _______________________________________________ >> >> 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 >> >> >> >> >> [[alternative HTML version deleted]] >> >> >> >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> 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