From 3b255656577119d1c325afc340beac9eeda927a1 Mon Sep 17 00:00:00 2001 From: RevBayes analysis <1695515+ms609@users.noreply.github.com> Date: Mon, 16 Feb 2026 06:51:51 +0000 Subject: [PATCH] SplitInformation.Splits --- DESCRIPTION | 2 +- NAMESPACE | 3 +++ NEWS.md | 6 ++++++ R/Information.R | 20 ++++++++++++++++++++ man/SplitInformation.Rd | 9 +++++++++ tests/testthat/test-information.R | 8 ++++++++ 6 files changed, 47 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index af0703721..c05e9ec88 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: TreeTools Title: Create, Modify and Analyse Phylogenetic Trees -Version: 2.1.0 +Version: 2.1.0.9000 Authors@R: c( person("Martin R.", 'Smith', role = c("aut", "cre", "cph"), email = "martin.smith@durham.ac.uk", diff --git a/NAMESPACE b/NAMESPACE index 2a9745831..400006615 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -151,6 +151,9 @@ S3method(SortTree,phylo) S3method(SplitImbalance,"NULL") S3method(SplitImbalance,Splits) S3method(SplitImbalance,phylo) +S3method(SplitInformation,Splits) +S3method(SplitInformation,numeric) +S3method(SplitInformation,phylo) S3method(SplitsInBinaryTree,"NULL") S3method(SplitsInBinaryTree,Splits) S3method(SplitsInBinaryTree,default) diff --git a/NEWS.md b/NEWS.md index 1828eb745..dd667930e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,8 @@ +# TreeTools 2.1.0.9000 (2026-02-16) # + +- Add Splits and phylo methods for `SplitInformation()` + + # TreeTools 2.1.0 (2026-02-10) # - Add method `RenumberTips.Splits()`. @@ -12,6 +17,7 @@ - `MatrixToPhyDat()` gains `tipLabels` parameter. - Document return value for `J1Index()`. + # TreeTools 2.0.0 (2025-09-23) # ## New functionality diff --git a/R/Information.R b/R/Information.R index 30cc4696a..c5813263f 100644 --- a/R/Information.R +++ b/R/Information.R @@ -170,9 +170,29 @@ CharacterInformation <- function(tokens) { #' @template MRS #' @export SplitInformation <- function(A, B = A[1]) { + UseMethod("SplitInformation") +} + +#' @rdname SplitInformation +#' @export +SplitInformation.numeric <- function(A, B = A[1]) { -(Log2TreesMatchingSplit(A, B) - Log2Unrooted.int(A + B)) } +#' @rdname SplitInformation +#' @export +SplitInformation.Splits <- function(A, B) { + nTip <- NTip(A) + tis <- TipsInSplits(A) + Log2Unrooted.int(nTip) - Log2Rooted.int(tis) - Log2Rooted.int(nTip - tis) +} + +#' @rdname SplitInformation +#' @export +SplitInformation.phylo <- function(A, B) { + SplitInformation(as.Splits(A)) +} + #' @rdname SplitInformation #' @param partitionSizes Integer vector specifying the number of taxa in each #' partition of a multi-partition split. diff --git a/man/SplitInformation.Rd b/man/SplitInformation.Rd index db27e2894..ddaf1c83c 100644 --- a/man/SplitInformation.Rd +++ b/man/SplitInformation.Rd @@ -2,11 +2,20 @@ % Please edit documentation in R/Information.R \name{SplitInformation} \alias{SplitInformation} +\alias{SplitInformation.numeric} +\alias{SplitInformation.Splits} +\alias{SplitInformation.phylo} \alias{MultiSplitInformation} \title{Phylogenetic information content of splitting leaves into two partitions} \usage{ SplitInformation(A, B = A[1]) +\method{SplitInformation}{numeric}(A, B = A[1]) + +\method{SplitInformation}{Splits}(A, B) + +\method{SplitInformation}{phylo}(A, B) + MultiSplitInformation(partitionSizes) } \arguments{ diff --git a/tests/testthat/test-information.R b/tests/testthat/test-information.R index d65b78f73..f50f8fad5 100644 --- a/tests/testthat/test-information.R +++ b/tests/testthat/test-information.R @@ -12,6 +12,14 @@ test_that("Trees matching splits calculated correctly", { expect_equal(log(315/10395)/-log(2), SplitInformation(3, 5)) }) +test_that("SplitInformation() handles Splits", { + t6 <- BalancedTree(6) + expect_equal(SplitInformation(t6), SplitInformation(as.Splits(t6))) + expect_equal(SplitInformation(t6), c(`8` = SplitInformation(3, 3), + `9` = SplitInformation(2, 4), + `11` = SplitInformation(4, 2))) +}) + test_that("UnrootedTreesMatchingSplit() correct", { expect_equal(NRooted(3) * NRooted(5), UnrootedTreesMatchingSplit(c(3, 5))) expect_equal(LnRooted(30) + LnRooted(50), LnUnrootedTreesMatchingSplit(30, 50))