-Wdeprecated-declarations warning reported by CRAN's macOS/M1mac additional check (Apple clang 21, macOS 26 SDK). The newer libc++ deprecates std::char_traits<unsigned char>, which the vendored nlohmann/json instantiates through its binary output/stream adapters (std::basic_string<std::uint8_t> / std::basic_ostream<std::uint8_t>). ppforest2 does not use nlohmann's binary formats, so the vendored json.hpp is now bracketed with a _Pragma guard that suppresses the deprecation. _Pragma (unlike #pragma) is not flagged by R CMD check's pragma check. The guard is applied by make r-vendor-deps (scripts/vendor-guard-json.sh).Makevars instead of CMake, with no network access or downloaded dependencies at install time. Eigen is provided by RcppEigen; nlohmann/json and pcg headers are vendored under inst/include. This makes the package installable on CRAN's offline build machines. (fmt and csv-parser, used only by the CLI, are no longer part of the R build.)EIGEN_NO_AUTOMATIC_RESIZING on all platforms and EIGEN_DONT_VECTORIZE on Windows.stats/GroupPartition and stats/Simulation so the code compiles warning-free under a strict C++17 GCC (-Wall -Wextra -pedantic).EIGEN_VERSION_AT_LEAST(3, 4, 0) guard fails the build with a clear message if an incompatible Eigen is supplied (e.g. via RcppEigen).make r-vendor-deps re-vendors the committed json/pcg headers after a version bump in core/Dependencies.cmake.DESCRIPTION uses Authors@R and cites the projection-pursuit tree and forest references with DOIs.\donttest with requireNamespace() guards instead of \dontrun, so they run under --run-donttest when the suggested packages are available.cran-comments.md. The package passes R CMD check --as-cran with no errors or warnings; remaining notes (new submission, cosmetic pragmas in the vendored nlohmann/json headers) are documented for the reviewer.oob_error is NA_real_ (R) / "not available" (CLI) when no observation has any out-of-bag tree.null-or-value representation so downstream tooling can distinguish "computed but empty" from other shapes without special-casing.pptr() and pprf() with formula and matrix interfaces. Returned models carry an S3 class vector identifying both model type and mode (e.g. c("pprf_classification", "pprf", "ppmodel")).predict() returns group labels (type = "class") or vote proportions (type = "prob") for classification.summary() displays training and OOB confusion matrices.oob_error(), oob_predictions(), oob_samples(), bag_samples(), permuted_importance(), weighted_importance() — compute from the training data stored on the model on first access and memoize in an environment cache, so training is fast and repeated access is free. oob_predictions() returns a factor with NA for rows with no OOB tree.save_json() and load_json() for model persistence.pp_tree() and pp_rand_forest() model specifications.datasets::iris from base R for iris examples.)train fits a tree or forest from CSV and saves as JSON.predict applies a saved model to new data.evaluate runs train/test evaluation with smart convergence.summarize displays model configuration, data summary, and metrics from a saved model JSON. --data recomputes metrics from training data.benchmark runs multi-scenario performance benchmarks with baseline comparison.serve exposes a saved model over HTTP — GET / returns the model summary as JSON (or an HTML dashboard for browsers showing configuration, training metrics, and variable importance), GET /health is a liveness probe, and POST /predict accepts a feature CSV and returns predictions (JSON for API clients, an HTML predictions page for browsers, with a Download CSV button and confusion matrix when the request CSV includes a response column). Results are cached in-memory with shareable ?id=… URLs; the dashboard binds to 127.0.0.1:8080 by default.Regression support is included but untested in production workloads. API surface and defaults may change in future releases.
ByCutpoint grouping strategy that quantile-slices the continuous response, a MeanResponse leaf, and MinSize / MinVariance / CompositeStop (stop::any) stop rules.y is numeric (not a factor). predict() returns a numeric vector (type = "response").grouping_by_cutpoint(), leaf_mean_response(), stop_min_size(), stop_min_variance(), stop_any().summary() displays MSE / MAE / R² for regression models. oob_predictions() returns a numeric vector with NA_real_ for rows with no OOB tree.save_json() / load_json() preserve regression mode; parsnip pp_tree() / pp_rand_forest() accept mode = "regression".--mode classification|regression selects the training mode; regression reads the last CSV column as the continuous response. predict returns numeric predictions and MSE/MAE/R²; evaluate reports MSE for regression.california_housing (20,433 × 9, predict median_house_value). For smaller regression examples use datasets::mtcars from base R.