[R-sig-Geo] raster: stackApply problems..

Leonidas Liakos |eon|d@@_||@ko@ @end|ng |rom y@hoo@gr
Tue Nov 26 20:53:49 CET 2019


Thank you!
The problem is not with the resulting values ​​but with the index
mapping. Values ​​are correct in all three cases.

As I wrote in a previous post in the thread
(https://stat.ethz.ch/pipermail/r-sig-geo/2019-November/027821.html) ,
stackApply behaves inconsistently depending on whether the exported
stack will remain in memory or it will be stored, due to its large size,
on the hard disk.

In the first case the indices are identical to my function (ver_mean)
and the lubridate::wday indexing system (and are correct) while in the
second they are shuffled.

So, while Sunday has index 1 and while in the first case (when the
result is in memory) stackApply returns the correct index, in the second
case (when the result is stored on the hard disk) it returns index_4! So
how can one be sure if index_1 corresponds to Sunday or another day
using stackApply since it sometimes enumerates it with index_1 and
sometimes index_4?


Try to run this example (when the resulting stack remains in memory) to
see that the indexes are identical (stackApply = ver_median =
lubridate::wday)
https://gist.github.com/kokkytos/5d554b5a725bb48d2189e2d1fa0e2206

Thank you again

On 11/26/19 9:00 PM, Vijay Lulla wrote:
> I'm sorry for the miscommunication.  What I meant to say is that the
> output from stackApply and zApply are the same (because zApply uses
> stackApply internally) except the names.  The behavior of stackApply
> makes sense because AFAIUI R doesn't automatically reorder
> vectors/indices that it receives.  Your observation about inconsistent
> result with ver_mean is very valid though!  And, that's what I meant
> with my comment that using sapply with the explicit ordering that you
> want is the best way to control what raster package will output.  In R
> the input order should be maintained (this is the prime difference
> between SQL and R) but packages/tools do not always adhere to
> this...so it's never clear how the output will be ordered.  Sorry for
> the confusion.
>
>
> On Tue, Nov 26, 2019 at 12:22 PM Leonidas Liakos
> <leonidas_liakos using yahoo.gr <mailto:leonidas_liakos using yahoo.gr>> wrote:
>
>     Why do they seem logical since they do not match?
>
>     Check for example index 1 (Sunday). The results are different for
>     the three processes
>
>     > stackapply_mean
>     class      : RasterBrick
>     dimensions : 300, 300, 90000, 7  (nrow, ncol, ncell, nlayers)
>     resolution : 500, 500  (x, y)
>     extent     : 0, 150000, 0, 150000  (xmin, xmax, ymin, ymax)
>     crs        : NA
>     source     :
>     /tmp/RtmpkRMXLb/raster/r_tmp_2019-11-26_191359_7710_20324.grd
>     names      :  index_5,  index_6,  index_7,  index_1,  index_2, 
>     index_3,  index_4
>     min values : 440.0467, 444.9182, 437.1589, 444.6946, 440.2028,
>     429.6900, 442.7436
>     max values : 563.8341, 561.7687, 560.4509, 565.8671, 560.1375,
>     561.7972, 556.2471
>
>
>     > ver_mean
>     class      : RasterStack
>     dimensions : 300, 300, 90000, 7  (nrow, ncol, ncell, nlayers)
>     resolution : 500, 500  (x, y)
>     extent     : 0, 150000, 0, 150000  (xmin, xmax, ymin, ymax)
>     crs        : NA
>     names      :  layer.1,  layer.2,  layer.3,  layer.4,  layer.5, 
>     layer.6,  layer.7
>     min values : 442.7436, 440.0467, 444.9182, 437.1589, 444.6946,
>     440.2028, 429.6900
>     max values : 556.2471, 563.8341, 561.7687, 560.4509, 565.8671,
>     560.1375, 561.7972
>
>
>     > z
>     class      : RasterBrick
>     dimensions : 300, 300, 90000, 7  (nrow, ncol, ncell, nlayers)
>     resolution : 500, 500  (x, y)
>     extent     : 0, 150000, 0, 150000  (xmin, xmax, ymin, ymax)
>     crs        : NA
>     source     :
>     /tmp/RtmpkRMXLb/raster/r_tmp_2019-11-26_191439_7710_04780.grd
>     names      :       X1,       X2,       X3,       X4,      
>     X5,       X6,       X7
>     min values : 440.0467, 444.9182, 437.1589, 444.6946, 440.2028,
>     429.6900, 442.7436
>     max values : 563.8341, 561.7687, 560.4509, 565.8671, 560.1375,
>     561.7972, 556.2471
>                : 1, 2, 3, 4, 5, 6, 7
>
>
>     On 11/26/19 7:03 PM, Vijay Lulla wrote:
>>     If you read the code/help for `stackApply` and `zApply` you'll
>>     see that the results that you obtain make sense (at least they
>>     seem sensible/reasonable to me).  IMO, if you want to control the
>>     ordering of your layers then just use sapply, like how you've
>>     used for ver_mean.  IMO, this is the only reliable (safe?), and
>>     quite a readable, way to accomplish what you're trying to do.
>>     Just my 2 cents.
>>     -- Vijay.
>>
>>     On Tue, Nov 26, 2019 at 11:19 AM Leonidas Liakos via R-sig-Geo
>>     <r-sig-geo using r-project.org <mailto:r-sig-geo using r-project.org>> wrote:
>>
>>         I added raster::zApply in my tests to validate the results.
>>         However, the
>>         indices of the names of the results are different now. Recall
>>         that the
>>         goal is to calculate from a raster stack time series the mean
>>         per day of
>>         the week. And that problem I have is that stackApply, zApply and
>>         calc/sapply return different indices in the result names. New
>>         code is
>>         available here:
>>         https://gist.github.com/kokkytos/93f315a5ecf59c0b183f9788754bc170
>>         I'm really curious about missing something.
>>
>>
>>         On 11/20/19 3:30 AM, Frederico Faleiro wrote:
>>         > Hi Leonidas,
>>         >
>>         > both results are in the same order, but the name is different.
>>         > You can rename the first as in the second:
>>         > names(res) <- names(res2)
>>         >
>>         > I provided an example to help you understand the logic.
>>         >
>>         > library(raster)
>>         > beginCluster(2)
>>         > r <- raster()
>>         > values(r) <- 1
>>         > # simple sequential stack from 1 to 6 in all cells
>>         > s <- stack(r, r*2, r*3, r*4, r*5, r*6)
>>         > s
>>         > res <- clusterR(s, stackApply, args =
>>         list(indices=c(2,2,3,3,1,1), fun
>>         > = mean))
>>         > res
>>         > res2 <- stackApply(s, c(2,2,3,3,1,1), mean)
>>         > res2
>>         > dif <- res - res2
>>         > # exatly the same order because the difference is zero for
>>         all layers
>>         > dif
>>         > # rename
>>         > names(res) <- names(res2)
>>         >
>>         > Best regards,
>>         >
>>         > Frederico Faleiro
>>         >
>>         > On Tue, Nov 19, 2019 at 4:15 PM Leonidas Liakos via R-sig-Geo
>>         > <r-sig-geo using r-project.org <mailto:r-sig-geo using r-project.org>
>>         <mailto:r-sig-geo using r-project.org
>>         <mailto:r-sig-geo using r-project.org>>> wrote:
>>         >
>>         >     I run the example with clusterR:
>>         >
>>         >     no_cores <- parallel::detectCores() -1
>>         >     raster::beginCluster(no_cores)
>>         >     ?????? res <- raster::clusterR(inp, raster::stackApply,
>>         args =
>>         >     list(indices=c(2,2,3,3,1,1),fun = mean))
>>         >     raster::endCluster()
>>         >
>>         >     And the result is:
>>         >
>>         >     > res
>>         >     class?????????? : RasterBrick
>>         >     dimensions : 180, 360, 64800, 3?? (nrow, ncol, ncell,
>>         nlayers)
>>         >     resolution : 1, 1?? (x, y)
>>         >     extent???????? : -180, 180, -90, 90?? (xmin, xmax,
>>         ymin, ymax)
>>         >     crs?????????????? : +proj=longlat +datum=WGS84 +ellps=WGS84
>>         >     +towgs84=0,0,0
>>         >     source???????? : memory
>>         >     names?????????? : layer.1, layer.2, layer.3
>>         >     min values :???????? 1.5,???????? 3.5,???????? 5.5
>>         >     max values :???????? 1.5,???????? 3.5,???????? 5.5??
>>         >
>>         >
>>         >     layer.1, layer.2, layer.3 (?)
>>         >
>>         >     So what corrensponds to what?
>>         >
>>         >
>>         >     If I run:
>>         >
>>         >     res2 <- stackApply(inp,c(2,2,3,3,1,1),mean)
>>         >
>>         >     The result is:
>>         >
>>         >     > res2
>>         >     class      : RasterBrick
>>         >     dimensions : 180, 360, 64800, 3  (nrow, ncol, ncell,
>>         nlayers)
>>         >     resolution : 1, 1  (x, y)
>>         >     extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
>>         >     crs        : +proj=longlat +datum=WGS84 +ellps=WGS84
>>         +towgs84=0,0,0
>>         >     source     : memory
>>         >     names      : index_2, index_3, index_1
>>         >     min values :     1.5,     3.5,     5.5
>>         >     max values :     1.5,     3.5,     5.5
>>         >
>>         >     There is no consistency with the names of the output
>>         and obscure
>>         >     correspondence with the indices in the case of clusterR
>>         >
>>         >
>>         >             [[alternative HTML version deleted]]
>>         >
>>         >     _______________________________________________
>>         >     R-sig-Geo mailing list
>>         >     R-sig-Geo using r-project.org
>>         <mailto:R-sig-Geo using r-project.org>
>>         <mailto:R-sig-Geo using r-project.org <mailto:R-sig-Geo using r-project.org>>
>>         >     https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>         >
>>
>>                 [[alternative HTML version deleted]]
>>
>>         _______________________________________________
>>         R-sig-Geo mailing list
>>         R-sig-Geo using r-project.org <mailto:R-sig-Geo using r-project.org>
>>         https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>>
>>
>

	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list