From fe61a3e51d0390a93f22567af8b180eb4a8d5ba7 Mon Sep 17 00:00:00 2001 From: RevBayes analysis <1695515+ms609@users.noreply.github.com> Date: Mon, 9 Feb 2026 06:41:43 +0000 Subject: [PATCH 1/2] RenumberTree() with numeric tipOrder --- NEWS.md | 1 + R/tree_numbering.R | 11 ++++++++--- man/RenumberTips.Rd | 5 +++-- tests/testthat/test-tree_numbering.R | 6 ++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/NEWS.md b/NEWS.md index e7862cb4d..bcecccebc 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,7 @@ # TreeTools 2.0.0.9006 (development) # - `FirstMatchingSplit()`... - Support logical `pole` in `PolarizeSplits()`. +- `RenumberTree()` supports numeric `tipOrder` input. # TreeTools 2.0.0.9004 (development) # - Support larger trees in `ClusterTable` objects. diff --git a/R/tree_numbering.R b/R/tree_numbering.R index 40a1fdc27..5b8bf4635 100644 --- a/R/tree_numbering.R +++ b/R/tree_numbering.R @@ -583,8 +583,9 @@ TntOrder.NULL <- function(tree) NULL #' #' @template treeParam #' @param tipOrder A character vector containing the values of -#' `tree[["tip.label"]]` in the desired sort order, or an object -#' (perhaps of class `phylo` or `Splits`) with tip labels. +#' `tree[["tip.label"]]` in the desired sort order, +#' an object (perhaps of class `phylo` or `Splits`) with tip labels, +#' or a numeric specifying the desired order. #' #' @return `RenumberTips()` returns `tree`, with the tips' internal #' representation numbered to match `tipOrder`. @@ -604,7 +605,11 @@ RenumberTips <- function(tree, tipOrder) UseMethod("RenumberTips") #' @export RenumberTips.phylo <- function(tree, tipOrder) { startOrder <- tree[["tip.label"]] - newOrder <- TipLabels(tipOrder, single = TRUE) + newOrder <- if (is.numeric(tipOrder)) { + startOrder[tipOrder] + } else { + TipLabels(tipOrder, single = TRUE) + } if (!identical(startOrder, newOrder)) { if (length(startOrder) != length(newOrder)) { startOnly <- setdiff(startOrder, newOrder) diff --git a/man/RenumberTips.Rd b/man/RenumberTips.Rd index c7f48bfe5..b439c690b 100644 --- a/man/RenumberTips.Rd +++ b/man/RenumberTips.Rd @@ -22,8 +22,9 @@ RenumberTips(tree, tipOrder) \item{tree}{A tree of class \code{\link[ape:read.tree]{phylo}}.} \item{tipOrder}{A character vector containing the values of -\code{tree[["tip.label"]]} in the desired sort order, or an object -(perhaps of class \code{phylo} or \code{Splits}) with tip labels.} +\code{tree[["tip.label"]]} in the desired sort order, +an object (perhaps of class \code{phylo} or \code{Splits}) with tip labels, +or a numeric specifying the desired order.} } \value{ \code{RenumberTips()} returns \code{tree}, with the tips' internal diff --git a/tests/testthat/test-tree_numbering.R b/tests/testthat/test-tree_numbering.R index 14989d72c..ed75ee461 100644 --- a/tests/testthat/test-tree_numbering.R +++ b/tests/testthat/test-tree_numbering.R @@ -22,6 +22,12 @@ test_that("RenumberTree() fails safely", { expect_error(RenumberTree(1:4, 1:4, 5:6)) }) +test_that("RenumberTree() with numeric tipOrder", { + tr <- BalancedTree(6) + order <- c(6, 5, 4, 2, 3, 1) + expect_equal(RenumberTips(tr, order), RenumberTips(tr, TipLabels(order))) +} + test_that("RenumberTree() handles polytomies", { tr <- ape::read.tree(text = "(a, (b, d, c));") edge <- tr$edge From e549c4c5666e8a6b7756447515afd077bf662a66 Mon Sep 17 00:00:00 2001 From: "Martin R. Smith" <1695515+ms609@users.noreply.github.com> Date: Mon, 9 Feb 2026 09:33:20 +0000 Subject: [PATCH 2/2] Missing ) --- tests/testthat/test-tree_numbering.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-tree_numbering.R b/tests/testthat/test-tree_numbering.R index ed75ee461..e6164bdf0 100644 --- a/tests/testthat/test-tree_numbering.R +++ b/tests/testthat/test-tree_numbering.R @@ -26,7 +26,7 @@ test_that("RenumberTree() with numeric tipOrder", { tr <- BalancedTree(6) order <- c(6, 5, 4, 2, 3, 1) expect_equal(RenumberTips(tr, order), RenumberTips(tr, TipLabels(order))) -} +}) test_that("RenumberTree() handles polytomies", { tr <- ape::read.tree(text = "(a, (b, d, c));")