These functions find peaks (local maxima) and valleys (local minima) in a
numeric vector, using a user selectable span and global and local size
thresholds, returning a logical
vector.
find_peaks(
x,
global.threshold = NULL,
local.threshold = NULL,
local.reference = "median",
threshold.range = NULL,
span = 3,
strict = FALSE,
na.rm = FALSE
)find_valleys(
x,
global.threshold = NULL,
local.threshold = NULL,
local.reference = "median",
threshold.range = NULL,
span = 3,
strict = FALSE,
na.rm = FALSE
)
A vector of logical values of the same length as x
. Values
that are TRUE correspond to local peaks in vector x
and can be used
to extract the rows corresponding to peaks from a data frame.
numeric vector. Hint: to find valleys, change the sign of the
argument with the unnary operator -
.
numeric A value belonging to class "AsIs"
is
interpreted as an absolute minimum height or depth expressed in data units.
A bare numeric
value (normally between 0.0 and 1.0), is interpreted
as relative to threshold.range
. In both cases it sets a
global height (depth) threshold below which peaks (valleys) are
ignored. A bare negative numeric
value indicates the global
height (depth) threshold below which peaks (valleys) are be ignored. If
global.threshold = NULL
, no threshold is applied and all peaks
returned.
numeric A value belonging to class "AsIs"
is
interpreted as an absolute minimum height (depth) expressed in data units
relative to a within-window computed reference value. A bare numeric
value (normally between 0.0 and 1.0), is interpreted as expressed in units
relative to threshold.range
. In both cases local.threshold
sets a local height (depth) threshold below which peaks (valleys)
are ignored. If local.threshold = NULL
or if span
spans the
whole of x
, no threshold is applied.
character One of "median"
or "farthest"
.
The reference used to assess the height of the peak, either the
minimum/maximum value within the window or the median of all values in the
window.
numeric vector If of length 2 or a longer vector
range(threshold.range)
is used to scale both thresholds. With
NULL
, the default, range(x)
is used, and with a vector of
length one range(threshold.range, x)
is used, i.e., the range
is expanded.
odd positive integer A peak is defined as an element in a
sequence which is greater than all other elements within a moving window of
width span
centred at that element. The default value is 5, meaning
that a peak is taller than its four nearest neighbours. span = NULL
extends the span to the whole length of x
.
logical flag: if TRUE
, an element must be strictly
greater than all other values in its window to be considered a peak.
Default: FALSE
(since version 0.13.1).
logical indicating whether NA
values should be stripped
before searching for peaks.
Function find_peaks
is a wrapper built onto function
peaks
from splus2R, adds support for peak
height thresholds and handles span = NULL
and non-finite (including
NA) values differently than splus2R::peaks
. Instead of giving an
error when na.rm = FALSE
and x
contains NA
values,
NA
values are replaced with the smallest finite value in x
.
span = NULL
is treated as a special case and selects max(x)
.
Passing `strict = TRUE` ensures that multiple global and within window
maxima are ignored, and can result in no peaks being returned.
Two tests make it possible to ignore irrelevant peaks. One test
(global.threshold
) is based on the absolute height of the peaks and
can be used in all cases to ignore globally low peaks. A second test
(local.threshold
) is available when the window defined by `span`
does not include all observations and can be used to ignore peaks that are
not locally prominent. In this second approach the height of each peak is
compared to a summary computed from other values within the window of width
equal to span
where it was found. In this second case, the reference
value used within each window containing a peak is given by
local.reference
. Parameter threshold.range
determines how the
values passed as argument to global.threshold
and
local.threshold
are scaled. The default, NULL
uses the range
of x
. Thresholds for ignoring too small peaks are applied after
peaks are searched for, and threshold values can in some cases
result in no peaks being returned.
While functions find_peaks
and find_valleys()
accept as input
a numeric
vector and return a logical
vector, methods
peaks
and valleys
accept as input different R
objects, including spectra and collections of spectra and return a subset
of the object. These methods are implemented using calls to functions
find_peaks
and fit_peaks
.
peaks
.
Other peaks and valleys functions:
find_spikes()
,
get_peaks()
,
peaks()
,
replace_bad_pixs()
,
spikes()
,
valleys()
,
wls_at_target()
with(sun.data, which(find_peaks(s.e.irrad, span = NULL)))
with(sun.data, which(find_peaks(s.e.irrad, span = 51)))
with(sun.data, w.length[find_peaks(s.e.irrad, span = 51)])
with(sun.data, sum(find_peaks(s.e.irrad, span = NULL, strict = TRUE)))
with(sun.data, which(find_valleys(s.e.irrad, span = NULL)))
with(sun.data, which(find_valleys(s.e.irrad, span = 51)))
Run the code above in your browser using DataLab