Patch release with substantive vignette improvements and several factual corrections to the worked example. No changes to analytical behaviour or to any function signature.
ggplot2, patchwork, and ggtext
(all in Suggests) and skip cleanly if any is missing.char_plot_raw() (Fig. 1) and
char_plot_thresh_diag() (Fig. 2), are now included in the
vignette alongside the analytical figures (Figs. 3, 5, 6, 7, 8).CO_compensated_charParams.csv (with companion
CO_compensated_charData.csv) is shipped in
inst/validation/. It is identical to the standard
CO_charParams.csv except that the working threshold
percentile (threshValues[4]) is lowered from 0.99 to 0.95
to compensate for language-induced drift in the Gaussian mixture model
(GMM) noise estimation. The vignette uses this file for the worked
example. With this compensation, R identifies 50 peaks for Code Lake
(close to the published MATLAB v2.0 result of 48 peaks) and reproduces
the significant decrease in fire-return intervals from Zone 1 to Zone 2
reported in Higuera et al. (2009). The strict 1-to-1 reference
configuration remains available as CO_charParams.csv.Threshold column in the validation table and a new “CO
(compensated)” row; the narrative below the table was rewritten in terms
of compensation for GMM drift rather than ad-hoc tuning.system.file() path in the vignette
(extdata → validation) that would have
returned an empty string if the chunk had been evaluated.Patch release addressing the third round of CRAN reviewer feedback, plus a related rendering fix discovered during local testing. No changes to analytical behaviour.
Title field shortened to “Peak Detection and Fire
History from Sediment-Charcoal Records” (62 characters) to satisfy the
CRAN convention of titles under 65 characters.char_write_results() and char_plot_all()
no longer default out_dir to the working directory.
out_dir is now required for
char_write_results() and required when
save = TRUE for char_plot_all(). This brings
the package into compliance with the CRAN policy against writing to the
user’s home filespace by default. Users should pass an explicit path;
tempdir() is acceptable for a transient location.tempdir() instead of a Results/ directory in
the user’s working directory, with a note that real users would
substitute their own path.char_plot_peaks(),
char_plot_fire_history() (peak-magnitude panel), and
char_plot_zones() (CDF and box-plot panels). These labels
were still using expression(paste(...)) (plotmath) syntax
and rendered as raw text under the
ggtext::element_markdown() axis-title theme introduced in
2.0.1. They now use the same conditional HTML-tag / plain-text pattern
as the FRI and fire-frequency labels, so super- and subscripts render
correctly when ggtext is available.Patch release addressing CRAN reviewer feedback on the initial submission. No changes to analytical behaviour.
char_parameters() is now exported. Its help page
previously contained an example for an unexported function.\dontrun{} wrappers in all examples with
\donttest{} (or unwrapped entirely, where the example runs
in under 5 seconds). All examples now use the bundled validation dataset
via system.file() and write any output to
tempdir().First R implementation of CharAnalysis, a direct translation of CharAnalysis v2.0 (MATLAB). Analytical outputs are validated against four benchmark datasets; user testing is ongoing. The package is in the experimental lifecycle stage: the API may change as user feedback is incorporated.
Please report issues at https://github.com/phiguera/CharAnalysis/issues.
devtools::install_github()
installation.CharAnalysis() returns a named list with S3 class
"CharAnalysis"; print(),
summary(), and plot() methods are
provided.char_plot_peaks(), char_plot_fire_history(),
char_plot_cumulative(), char_plot_fri(),
char_plot_zones(), char_plot_raw(),
char_plot_thresh_diag(), char_plot_sni());
save all to PDF with char_plot_all().char_write_results() writes the 33-column output matrix
to CSV with column headers and numeric format matching the MATLAB output
exactly.Robust lowess background (smoothing method 2).
MATLAB’s Curve Fitting Toolbox smooth(..., 'rlowess') and
the R char_lowess() port handle NaN gaps differently inside
the bisquare robustness iteration, producing slightly different
C_background series for records with missing values. For gap-free
records the difference is negligible (< 0.001); for records with NaN
gaps the maximum absolute difference across validated datasets is 0.267
(Chickaree Lake). Smoothing method 1 (plain lowess) is unaffected and
agrees to within floating-point noise.
GMM peak counts. The Gaussian mixture model EM algorithm accumulates floating-point arithmetic differently in R and MATLAB, causing slightly different threshold values in some local windows. Peak counts differ by 10–20% across validated datasets, with the direction varying by dataset.
Figures 9 and 10. The threshold-sensitivity detail plot (Fig. 9) and multi-site comparison plot (Fig. 10) from the MATLAB interface are not implemented in this R package.
Smoothed FRI column (col 23). The R package computes smoothed fire-return intervals in this column; MATLAB v2.0 stores NaN.
| Dataset | Site | charBkg max|diff| | Peaks R | Peaks MATLAB |
|---|---|---|---|---|
| CO | Code Lake, AK | ~5 × 10-6 | 39 | 48 |
| CH10 | Chickaree Lake, CO | 0.267 | 59 | 50 |
| SI17 | Silver Lake, CO | 0.130 | 25 | 31 |
| RA07 | Raven Lake, AK | < 0.001 | 15 | 17 |
Full validation details are in
inst/z_Validation_report_R_vs_MATLAB_V_2.0.md.
If you use CharAnalysis in published research, please cite:
Higuera, P.E., L.B. Brubaker, P.M. Anderson, F.S. Hu, and T.A. Brown. 2009. Vegetation mediated the impacts of postglacial climate change on fire regimes in the south-central Brooks Range, Alaska. Ecological Monographs 79:201–219. https://doi.org/10.1890/07-2019.1
If you used Version 2.0 specifically, please also cite the software:
Higuera, P.E. 2026. CharAnalysis: Diagnostic and analytical tools for peak analysis in sediment-charcoal records (Version 2.0). Zenodo. https://doi.org/10.5281/zenodo.19304064