[R-sig-Geo] indexing multi-layer rasters

Bede-Fazekas Ákos b|@|ev||@t @end|ng |rom gm@||@com
Thu Jan 16 18:53:32 CET 2020


Dear Ben,
Although I cannot answer your question on why logical subsetting was not 
implemented in package raster, there is a very easy workaround:
logo[[(1:nlayers(logo))[c(TRUE, TRUE, TRUE)]]]
logo[[(1:nlayers(logo))[c(TRUE, FALSE, TRUE)]]]

Also note that in case of lists '[[' does recursive indexing, and this 
type of logical indexing you are asking about works only with '['.
HTH,
Ákos Bede-Fazekas
Hungarian Academy of Sciences

2020.01.16. 17:50 keltezéssel, Ben Tupper írta:
> Hi,
>
> I usually avoid using logical indexes with multilayer rasters (stacks
> and bricks), but I have never understood why indexing ala `[[` with
> logicals isn't supported.  Below is an example that shows how it
> doesn't work like the typical indexing with logicals.  I'm not asking
> to have logical indices considered (although it would be handy), but
> instead I really just want to understand why it is the way it is.  I
> scanned over the introductory vignette (https://rspatial.org/raster)
> and issues (https://github.com/rspatial/raster/issues) but found
> nothing there.
>
> Thanks and cheers,
> Ben
>
> ### START
> library(raster)
>
> logo <- raster::brick(system.file("external/rlogo.grd", package="raster"))
>
> # red-red-red
> logo[[c(TRUE, TRUE, TRUE)]]
> # class      : RasterStack
> # dimensions : 77, 101, 7777, 3  (nrow, ncol, ncell, nlayers)
> # resolution : 1, 1  (x, y)
> # extent     : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
> # crs        : +proj=merc +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
> # names      : red.1, red.2, red.3
> # min values :     0,     0,     0
> # max values :   255,   255,   255
>
> # red-red
> logo[[c(TRUE, TRUE)]]
> # class      : RasterStack
> # dimensions : 77, 101, 7777, 2  (nrow, ncol, ncell, nlayers)
> # resolution : 1, 1  (x, y)
> # extent     : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
> # crs        : +proj=merc +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
> # names      : red.1, red.2
> # min values :     0,     0
> # max values :   255,   255
>
> # red
> logo[[c(TRUE)]]
> # class      : RasterLayer
> # band       : 1  (of  3  bands)
> # dimensions : 77, 101, 7777  (nrow, ncol, ncell)
> # resolution : 1, 1  (x, y)
> # extent     : 0, 101, 0, 77  (xmin, xmax, ymin, ymax)
> # crs        : +proj=merc +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
> # source     : /usr/lib64/R/library/raster/external/rlogo.grd
> # names      : red
> # values     : 0, 255  (min, max)
>
> logo[[c(TRUE, FALSE, TRUE)]]
> #Error in .local(x, ...) : not a valid subset
>
>
> #sessionInfo()
> # R version 3.5.1 (2018-07-02)
> # Platform: x86_64-redhat-linux-gnu (64-bit)
> # Running under: CentOS Linux 7 (Core)
> #
> # Matrix products: default
> # BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
> #
> # locale:
> #   [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
> 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
> LC_PAPER=en_US.UTF-8       LC_NAME=C
> # [9] LC_ADDRESS=C               LC_TELEPHONE=C
> LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
> #
> # attached base packages:
> #   [1] stats     graphics  grDevices utils     datasets  methods   base
> #
> # other attached packages:
> #   [1] raster_3.0-7 sp_1.3-2
> #
> # loaded via a namespace (and not attached):
> #   [1] compiler_3.5.1   rgdal_1.4-8      tools_3.5.1      yaml_2.2.0
>       Rcpp_1.0.3       codetools_0.2-15
> # [7] grid_3.5.1       lattice_0.20-35
>
> ### END
>
>
>
>



More information about the R-sig-Geo mailing list