Rescale values to a new range

rescale(x, to, from, ...)

# S3 method for class 'numeric'
rescale(x, to = c(0, 1), from = range(x, na.rm = TRUE, finite = TRUE), ...)

# S3 method for class 'RasterLayer'
rescale(
  x,
  to = c(0, 1),
  from = range(getValues(x), na.rm = TRUE, finite = TRUE),
  ...
)

# S3 method for class 'SpatRaster'
rescale(
  x,
  to = c(0, 1),
  from = range(values(x), na.rm = TRUE, finite = TRUE),
  ...
)

Arguments

x

A numeric vector or Raster* object.

to

The lower and upper bounds of the new range. Default c(0,1).

from

(optional) The lower and upper bounds of the old range (calculated from x).

...

Additional arguments (not used).

Value

A new object whose values have been rescaled.

Note

Objects with values that are all equal (e.g., all zeroes) will be returned as-is. This behaviour differs from scales:rescale which would return a value of 0.5.

Examples

rescale(50, from = c(0, 100), to = c(0, 1)) ## 0.5
#> [1] 0.5

x <- 0:100
rescale(x) ## defaults to new range [0,1]
#>   [1] 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14
#>  [16] 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29
#>  [31] 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43 0.44
#>  [46] 0.45 0.46 0.47 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59
#>  [61] 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.70 0.71 0.72 0.73 0.74
#>  [76] 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89
#>  [91] 0.90 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00
rescale(x, c(-1, 1))
#>   [1] -1.00 -0.98 -0.96 -0.94 -0.92 -0.90 -0.88 -0.86 -0.84 -0.82 -0.80 -0.78
#>  [13] -0.76 -0.74 -0.72 -0.70 -0.68 -0.66 -0.64 -0.62 -0.60 -0.58 -0.56 -0.54
#>  [25] -0.52 -0.50 -0.48 -0.46 -0.44 -0.42 -0.40 -0.38 -0.36 -0.34 -0.32 -0.30
#>  [37] -0.28 -0.26 -0.24 -0.22 -0.20 -0.18 -0.16 -0.14 -0.12 -0.10 -0.08 -0.06
#>  [49] -0.04 -0.02  0.00  0.02  0.04  0.06  0.08  0.10  0.12  0.14  0.16  0.18
#>  [61]  0.20  0.22  0.24  0.26  0.28  0.30  0.32  0.34  0.36  0.38  0.40  0.42
#>  [73]  0.44  0.46  0.48  0.50  0.52  0.54  0.56  0.58  0.60  0.62  0.64  0.66
#>  [85]  0.68  0.70  0.72  0.74  0.76  0.78  0.80  0.82  0.84  0.86  0.88  0.90
#>  [97]  0.92  0.94  0.96  0.98  1.00

f <- system.file("external/test.grd", package = "raster")
r <- raster::raster(f)
rescale(r) ## defaults to new range [0,1]
#> class      : RasterLayer 
#> dimensions : 115, 80, 9200  (nrow, ncol, ncell)
#> resolution : 40, 40  (x, y)
#> extent     : 178400, 181600, 329400, 334000  (xmin, xmax, ymin, ymax)
#> crs        : +proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +datum=WGS84 +units=m +no_defs 
#> source     : memory
#> names      : test 
#> values     : 0, 1  (min, max)
#> 
rescale(r, c(-1, 1))
#> class      : RasterLayer 
#> dimensions : 115, 80, 9200  (nrow, ncol, ncell)
#> resolution : 40, 40  (x, y)
#> extent     : 178400, 181600, 329400, 334000  (xmin, xmax, ymin, ymax)
#> crs        : +proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +datum=WGS84 +units=m +no_defs 
#> source     : memory
#> names      : test 
#> values     : -1, 1  (min, max)
#> 

f <- system.file("ex/test.grd", package = "terra")
r <- terra::rast(f)
rescale(r) ## defaults to new range [0,1]
#> class       : SpatRaster 
#> size        : 115, 80, 1  (nrow, ncol, nlyr)
#> resolution  : 40, 40  (x, y)
#> extent      : 178400, 181600, 329400, 334000  (xmin, xmax, ymin, ymax)
#> coord. ref. : +proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +datum=WGS84 +units=m +no_defs 
#> source(s)   : memory
#> varname     : test 
#> name        : test 
#> min value   :    0 
#> max value   :    1 
rescale(r, c(-1, 1))
#> class       : SpatRaster 
#> size        : 115, 80, 1  (nrow, ncol, nlyr)
#> resolution  : 40, 40  (x, y)
#> extent      : 178400, 181600, 329400, 334000  (xmin, xmax, ymin, ymax)
#> coord. ref. : +proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +datum=WGS84 +units=m +no_defs 
#> source(s)   : memory
#> varname     : test 
#> name        : test 
#> min value   :   -1 
#> max value   :    1