diff --git a/DESCRIPTION b/DESCRIPTION index af070372..c05e9ec8 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 2a974583..40000661 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 1828eb74..dd667930 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 30cc4696..c5813263 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 db27e289..ddaf1c83 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 d65b78f7..f50f8fad 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))