v2.14.0
New features
-
TransferConsensus()constructs a consensus tree that minimizes the sum of transfer distances to a set of input trees, using a greedy add-and-prune heuristic. Unlike majority-rule consensus, which can be highly unresolved when phylogenetic signal is diffuse, the transfer consensus uses the finer-grained transfer distance to produce more resolved trees. -
TransferDist()computes the transfer dissimilarity between phylogenetic trees, with scaled and unscaled variants. Supports all-pairs, cross-pairs, and single-pair computations. -
LAP (Jonker–Volgenant linear assignment) and MCI (Mutual Clustering Information) C++ implementations are now exposed via
inst/include/TreeDist/headers, allowing downstream packages to useLinkingTo: TreeDist.
Internals
-
Stack-allocated split buffers replaced with dynamically-sized vectors, removing a hard dependency on the compile-time
SL_MAX_SPLITSconstant. TreeDist now supports trees of any size permitted by TreeTools. -
Large-tree support (requires TreeTools ≥ 2.3.0): all distance functions now accept trees with up to 32 767 tips (previously limited to
SL_MAX_TIPS, 2048 with TreeTools ≤ 2.2.0).
Performance
RobinsonFoulds()now uses a fast C++ batch path for cross-distance computations (tree list vs tree list), matching the existing all-pairs batch performance. Previously, cross-distance calls fell through to per-pair R dispatch (~27× slower per pair); the new path achieves ~21× speedup on typical inputs (e.g. 50 × 250 trees, 50 tips).