phylospatial (development version)
plot.phylospatial()gains ataxaargument for choosing which lineage ranges to plot wheny = "comm", by name or by index, instead of a random sample. Also fixed themax_taxadocumentation, which referred to the wrongyvalue.moss()gains adataargument for loading companion layers on the same grid as the moss data set:"protection"(fraction of each cell in protected areas) and"popdens"(human population density), for use asinitandcostin conservation prioritizations. Both are available in raster and polygon formats.Fixed an error in
ps_prioritize()andps_prioritizr()wheninitorcostwas supplied as ansfobject, which the documentation already listed as supported.
phylospatial 1.5.0
CRAN release: 2026-10-01
New tree scaling functions modify a phylogeny’s branch lengths to focus analyses on particular parts of evolutionary history.
slice_tree()keeps only the portions of branches within a specified depth window, enabling time-sliced diversity analyses.delta_tree()applies Pagel’s delta transformation while preserving total tree height, shifting emphasis toward deeper or more recent divergence.uniform_tree()sets all branch lengths to 1, so that phylogenetic diversity measures become clade richness.rescale_tree()is a unit conversion function that rescales branch lengths without changing their relative proportions. Transformed trees can be passed tophylospatial()or assigned to thetreeelement of an existingphylospatialobject. See?tree_scalingandvignette("phylospatial-data").phylospatial()gains arescaleargument controlling how branch lengths are scaled during construction:"sum1"(the default, matching previous behavior) scales them to sum to 1,"tip1"scales the longest root-to-tip path to 1, and"raw"keeps the original units. The method used is recorded in the newps$rescaleelement.New function
ps_performance()computes performance curves forps_prioritize()results, tracking cumulative cost, protection added, conservation value, and the fraction of the tree meeting one or more range protection targets as sites are added in priority order. Aplot()method is included. To support this,ps_prioritize()results now carry a"prioritization"attribute recording the settings, inputs, and raw rankings used.Fixed a bug in
ps_prioritize()where sites not selected beforemax_iterwas reached were returned asNArather than the lowest possible rank (as documented). Withmethod = "probable"andsummarize = TRUE, this also inflated summary statistics for sites selected in only a few reps, since the average rank, rank percentiles, andtopXproportions were computed only across reps in which a site was selected. Unselected sites are now ranked last (i.e. equal to the number of occupied sites) in all outputs.Fixed an error in
ps_prioritize()when usingmethod = "probable"andsummarize = FALSEwith spatial output. Rep layers are now namedrep1,rep2, etc.New function
ps_prioritizr()converts aphylospatialobject into a conservation planning problem for theprioritizrpackage, which finds optimal solutions using integer linear programming. Every branch of the phylogeny is treated as a conservation feature with a range protection target, and existing protection (init) counts toward targets. Three objectives are supported: minimum-cost target achievement ("min_set"), and maximum target coverage ("targets") or minimum target shortfall ("shortfall") within a budget. The returned problem can be extended with any of prioritizr’s solvers, constraints, and penalties. Requiresprioritizr(>= 9.0.0).
phylospatial 1.4.0
CRAN release: 2026-04-16
New function
ps_grid()converts point occurrence data (e.g. GBIF records) into raster format suitable for use with phylospatial functions.New functions
ps_suggest_n_iter()andps_trace()provide convergence diagnostics for null model randomizations, wrappingnullcat::suggest_n_iter()andnullcat::trace_cat()on the occupied-site tip community matrix.ps_rand()andps_quantize()now exposewt_rowandwt_colas named parameters for spatially or functionally constrained null models. These accept weight matrices (e.g., a geographic distance decay matrix fromps_geodist()) that bias which pairs of sites or species exchange values during randomization.ps_rand()gains a newfun = "nullcat"path for binary data. This is the recommended path for binary data when convergence diagnostics or spatial weights are desired.ps_rand()now exposesn_iteras a named parameter controlling the number of swap iterations per null matrix. This is routed tonullcat::nullcat(),nullcat::quantize_prep(), orvegan::simulate.nullmodel()(asburnin) depending on the selectedfun. The default of 1000 fixes a pre-existing issue where the vegan sequential path used only 1 iteration per matrix by default.
phylospatial 1.3.0
CRAN release: 2026-04-03
New features
ps_dissim()now computes distances much faster viaparallelDistfor relevant metrics, while falling back toveganas needed. It also adds support for traditional non-phylogenetic species turnover metrics via a newtips_onlyoption.New helper function
ps_geodist()computes pairwise geographic distances between sites.The community matrix (
ps$comm) now stores only occupied sites, improving speed and memory usage for datasets with many unoccupied cells. Speedups are proportional to the fraction of empty sites and affect all major functions, withps_dissim()seeing the largest gains (~4x with 50% unoccupied cells) due to its quadratic scaling.New fields
ps$occupiedandps$n_sitestrack which rows in the original data are occupied and the total site count, respectively.New exported function
ps_expand()expands occupied-only results back to the full spatial extent withNAfor unoccupied sites.
Breaking changes
nrow(ps$comm)now equals the number of occupied sites, not total cells. Useps$n_sitesfor the total.ps$dissimis now dimensioned to occupied sites only.to_spatial(ps$comm, ps$spatial)no longer works directly. Useps_expand(ps, ps$comm, spatial = TRUE)orps_get_comm(ps)instead.ps_get_comm()withspatial = FALSEreturns an occupied-only matrix.
phylospatial 1.2.1
CRAN release: 2025-12-23
ps_diversity(),ps_rand(),ps_dissim(), andps_prioritize()have been refactored to optimize compute speed (~2x to 20x speedup).ps_ordinate()now defaults tomethod = "cmds", and has a bug fixed in its"pca"method.
phylospatial 1.2.0
CRAN release: 2025-12-20
CRAN compliance: fixed vignette builds to conditionally load suggested package ‘tmap’.
ps_diversity()now computes a smaller set of metrics by default, in order to reduce default run times.ps_rand()includes a new choice of summary statistic: in addition to the default “quantile” function, a new “z-score” option is available.quantize()andps_rand()now usenullcat::quantize()internally, addressing a flaw in the earlier implementation.phylospatial()and other functions that call it now use a compute-optimized internal range constructor.
phylospatial 1.1.1
CRAN release: 2025-05-02
ps_diversity()now computes a smaller set of metrics by default, in order to reduce runtimes.ps_rand()includes a new choice of summary statistic: in addition to the default “quantile” function, a new “z-score” option is available.
phylospatial 1.1.0
CRAN release: 2025-04-09
ps_diversity()now includes several new divergence and regularity measures, including terminal- and node-based versions of mean pairwise distance (MPD) and variance in pairwise distance (VPD).ps_rand()now includes an explicit"tip_shuffle"algorithm; previously this method could only be implemented by supplying a custom randomization function.
