Skip to contents

This method returns the result of interpolating spectral data from the original set of wavelengths to a new one.

Usage

interpolate_wl(x, w.length.out, fill, length.out, method, ...)

# Default S3 method
interpolate_wl(x, w.length.out, fill, length.out, method, ...)

# S3 method for class 'generic_spct'
interpolate_wl(
  x,
  w.length.out = NULL,
  fill = NA,
  length.out = NULL,
  method = "approx",
  ...
)

# S3 method for class 'generic_mspct'
interpolate_wl(
  x,
  w.length.out = NULL,
  fill = NA,
  length.out = NULL,
  method = "approx",
  ...,
  .parallel = FALSE,
  .paropts = NULL
)

Arguments

x

an R object

w.length.out

numeric vector of wavelengths (nm).

fill

a numeric value to be assigned to out of range wavelengths.

length.out

integer Length of the wavelength vector in the returned value. Overrides w.length.out is not NULL, respects its range but overrides the actual values.

method

character string One of "auto", "approx", "spline", "skip".

...

additional arguments passed to spline().

.parallel

if TRUE, apply function in parallel, using parallel backend provided by foreach

.paropts

a list of additional options passed into the foreach function when parallel computation is enabled. This is important if (for example) your code relies on external data or packages: use the .export and .packages arguments to supply them so that all cluster nodes have the correct environment set up for computing.

Value

A new spectral object or collection of spectral objects, of the same class as argument x. Each spectrum returned with more or fewer rows than in x, the requested new w.length values and new numeric values for spectral quantities, obtained by interpolation.

Details

Depending on method natural spline interpolation or linear interpolation are used. With method = spline a call to spline with method = "natural" is used and with method = "approx" a call to approx is used. If method = "auto" or method = NULL when 100 or fewer distinct wavelengths are available as input and/or the maximum wavelength step size in w.length.in is more than three times the minimum wavelength step size in w.length.out "spline" is used and "approx" otherwise. Finally, with method = "skip" the input is returned unchanged.

If w.length.out is a numeric vector and length.out = NULL, it directly gives the target wavelengths for interpolation. If it is NULL, and length.out is an integer value evenly spaced wavelength values covering the same wavelength range as in the input are generated. If w.length.out is a numeric vector and length.out is an integer value, length.out evenly spaced wavelengths covering the wavelength range of w.length.out are generated. Extrapolation is not supported.

With default fill = NA if the output exceeds the wavelength range of the input, extrapolated values are filled with NA values. With fill = NULL wavelengths outside the wavelength range of input data are discarded. A numerical value can be also be provided as fill. While interpolate_spectrum supports interpolation of a single numeric vector, interpolate_wl applies, one at a time, interpolation to all numeric columns found in x.

Methods (by class)

  • interpolate_wl(default): Default for generic function

  • interpolate_wl(generic_spct): Interpolate wavelength in an object of class "generic_spct" or derived.

  • interpolate_wl(generic_mspct): Interpolate wavelength in an object of class "generic_mspct" or derived.

Examples

interpolate_wl(sun.spct, 400:500, NA)
#> Object: source_spct [101 x 3]
#> Wavelength range 400-500 nm, step 1 nm 
#> Label: sunlight, simulated 
#> Measured on 2010-06-22 09:51:00 UTC 
#> Measured at 60.20911 N, 24.96474 E; Kumpula, Helsinki, FI 
#> Variables:
#>  w.length: Wavelength [nm]
#>  s.e.irrad: Spectral energy irradiance [W m-2 nm-1]
#>  s.q.irrad: Spectral photon irradiance [mol s-1 m-2 nm-1] 
#> --
#> # A tibble: 101 × 3
#>    w.length s.e.irrad  s.q.irrad
#>       <int>     <dbl>      <dbl>
#>  1      400     0.608 0.00000203
#>  2      401     0.626 0.00000210
#>  3      402     0.650 0.00000218
#>  4      403     0.621 0.00000209
#>  5      404     0.637 0.00000215
#>  6      405     0.626 0.00000212
#>  7      406     0.600 0.00000204
#>  8      407     0.595 0.00000202
#>  9      408     0.626 0.00000213
#> 10      409     0.662 0.00000226
#> # ℹ 91 more rows
interpolate_wl(sun.spct, 400:500, NULL)
#> Object: source_spct [101 x 3]
#> Wavelength range 400-500 nm, step 1 nm 
#> Label: sunlight, simulated 
#> Measured on 2010-06-22 09:51:00 UTC 
#> Measured at 60.20911 N, 24.96474 E; Kumpula, Helsinki, FI 
#> Variables:
#>  w.length: Wavelength [nm]
#>  s.e.irrad: Spectral energy irradiance [W m-2 nm-1]
#>  s.q.irrad: Spectral photon irradiance [mol s-1 m-2 nm-1] 
#> --
#> # A tibble: 101 × 3
#>    w.length s.e.irrad  s.q.irrad
#>       <int>     <dbl>      <dbl>
#>  1      400     0.608 0.00000203
#>  2      401     0.626 0.00000210
#>  3      402     0.650 0.00000218
#>  4      403     0.621 0.00000209
#>  5      404     0.637 0.00000215
#>  6      405     0.626 0.00000212
#>  7      406     0.600 0.00000204
#>  8      407     0.595 0.00000202
#>  9      408     0.626 0.00000213
#> 10      409     0.662 0.00000226
#> # ℹ 91 more rows
interpolate_wl(sun.spct, seq(200, 1000, by=0.1), 0)
#> Object: source_spct [8,001 x 3]
#> Wavelength range 200-1000 nm, step 0.1 nm 
#> Label: sunlight, simulated 
#> Measured on 2010-06-22 09:51:00 UTC 
#> Measured at 60.20911 N, 24.96474 E; Kumpula, Helsinki, FI 
#> Variables:
#>  w.length: Wavelength [nm]
#>  s.e.irrad: Spectral energy irradiance [W m-2 nm-1]
#>  s.q.irrad: Spectral photon irradiance [mol s-1 m-2 nm-1] 
#> --
#> # A tibble: 8,001 × 3
#>    w.length s.e.irrad s.q.irrad
#>       <dbl>     <dbl>     <dbl>
#>  1     200          0         0
#>  2     200.         0         0
#>  3     200.         0         0
#>  4     200.         0         0
#>  5     200.         0         0
#>  6     200.         0         0
#>  7     201.         0         0
#>  8     201.         0         0
#>  9     201.         0         0
#> 10     201.         0         0
#> # ℹ 7,991 more rows
interpolate_wl(sun.spct, c(400,500), length.out=201)
#> Object: source_spct [201 x 3]
#> Wavelength range 400-500 nm, step 0.5 nm 
#> Label: sunlight, simulated 
#> Measured on 2010-06-22 09:51:00 UTC 
#> Measured at 60.20911 N, 24.96474 E; Kumpula, Helsinki, FI 
#> Variables:
#>  w.length: Wavelength [nm]
#>  s.e.irrad: Spectral energy irradiance [W m-2 nm-1]
#>  s.q.irrad: Spectral photon irradiance [mol s-1 m-2 nm-1] 
#> --
#> # A tibble: 201 × 3
#>    w.length s.e.irrad  s.q.irrad
#>       <dbl>     <dbl>      <dbl>
#>  1     400      0.608 0.00000203
#>  2     400.     0.617 0.00000207
#>  3     401      0.626 0.00000210
#>  4     402.     0.638 0.00000214
#>  5     402      0.650 0.00000218
#>  6     402.     0.635 0.00000214
#>  7     403      0.621 0.00000209
#>  8     404.     0.629 0.00000212
#>  9     404      0.637 0.00000215
#> 10     404.     0.632 0.00000214
#> # ℹ 191 more rows