Apply a function over (multi-band) pixel time series
Description
This generic function applies a function on pixel time series of a data cube, an R array, or other classes if implemented. The resulting object is expected to have the same spatial and temporal shape as the input, i.e., no reduction is performed.
Usage
apply_time(x, ...)
Arguments
Argument
Description
x
input data
…
additional arguments passed to method implementations
Value
return value and type depend on the class of x
Examples
# 1. input is data cube# create image collection from example Landsat data only # if not already done in other examplesif (!file.exists(file.path(tempdir(), "L8.db"))) { L8_files <-list.files(system.file("L8NY18", package ="gdalcubes"),".TIF", recursive =TRUE, full.names =TRUE)create_image_collection(L8_files, "L8_L1TP", file.path(tempdir(), "L8.db"), quiet =TRUE) }L8.col =image_collection(file.path(tempdir(), "L8.db"))v =cube_view(extent=list(left=388941.2, right=766552.4, bottom=4345299, top=4744931, t0="2018-01", t1="2018-06"),srs="EPSG:32618", nx =497, ny=526, dt="P1M")L8.cube =raster_cube(L8.col, v) L8.cube =select_bands(L8.cube, c("B04", "B05")) L8.ndvi =apply_pixel(L8.cube, "(B05-B04)/(B05+B04)", "NDVI")# Apply a user defined R functionapply_time(L8.ndvi, names="NDVI_residuals", FUN=function(x) { y = x["NDVI",]if (sum(is.finite(y)) <3) {return(rep(NA,ncol(x))) } t =1:ncol(x)return(predict(lm(y ~ t)) - x["NDVI",])})
A data cube proxy object
Dimensions:
low high count pixel_size chunk_size
t 2018-01-01 2018-06-30 6 P1M 6
y 4345299 4744931 526 759.756653992395 384
x 388941.2 766552.4 497 759.781086519115 384
Bands:
name offset scale nodata unit
1 NDVI_residuals 0 1 NaN
# apply_timeApply a function over (multi-band) pixel time series```{r include=FALSE}library(gdalcubes)```## DescriptionThis generic function applies a function on pixel time series of a data cube, an R array, or other classes if implemented.The resulting object is expected to have the same spatial and temporal shape as the input, i.e., no reduction is performed.## Usage```rapply_time(x, ...)```## Arguments| Argument | Description ||:------------|:----------------------------------|| x | input data || ... | additional arguments passed to method implementations |## Valuereturn value and type depend on the class of x## Examples```{r}# 1. input is data cube# create image collection from example Landsat data only # if not already done in other examplesif (!file.exists(file.path(tempdir(), "L8.db"))) { L8_files <-list.files(system.file("L8NY18", package ="gdalcubes"),".TIF", recursive =TRUE, full.names =TRUE)create_image_collection(L8_files, "L8_L1TP", file.path(tempdir(), "L8.db"), quiet =TRUE) }L8.col =image_collection(file.path(tempdir(), "L8.db"))v =cube_view(extent=list(left=388941.2, right=766552.4, bottom=4345299, top=4744931, t0="2018-01", t1="2018-06"),srs="EPSG:32618", nx =497, ny=526, dt="P1M")L8.cube =raster_cube(L8.col, v) L8.cube =select_bands(L8.cube, c("B04", "B05")) L8.ndvi =apply_pixel(L8.cube, "(B05-B04)/(B05+B04)", "NDVI")# Apply a user defined R functionapply_time(L8.ndvi, names="NDVI_residuals", FUN=function(x) { y = x["NDVI",]if (sum(is.finite(y)) <3) {return(rep(NA,ncol(x))) } t =1:ncol(x)return(predict(lm(y ~ t)) - x["NDVI",])})# 2. input is arrayd <-c(4,16,32,32)x <-array(rnorm(prod(d)), d)z <-apply_time(x, function(v) { y =matrix(NA, ncol=ncol(v), nrow=2) y[1,] = (v[1,] + v[2,]) /2 y[2,] = (v[3,] + v[4,]) /2 y})dim(z)```## See Also[`apply_time.cube`](apply_time.cube.Rmd)[`apply_time.array`](apply_time.array.Rmd)