From a148b556c424d3af01c50e943e1731d4d380ce3f Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 1 Sep 2022 12:16:17 -0700 Subject: [PATCH 1/5] Function to get the root node from tree input --- R/prep.tree.R | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/R/prep.tree.R b/R/prep.tree.R index 0b45152..caa32fd 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -143,3 +143,16 @@ check.parent.values <- function(node.names, parent.col) { } )); } + +get.root.node <- function(tree) { + valid.values <- as.character(c(-1, 0)); + candidates <- which(is.na(tree$parent) | tree$parent %in% valid.values); + + if (length(candidates) > 1) { + stop('More than one root node detected.'); + } else if (length(candidates) == 0) { + stop('No root node provided.'); + } + + return(candidates); + } From 891eb42312ae8ed16a059a1339e9fd5f40c927a7 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 1 Sep 2022 12:16:40 -0700 Subject: [PATCH 2/5] Add root node check to tree prep --- R/prep.tree.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/R/prep.tree.R b/R/prep.tree.R index caa32fd..ede2d90 100644 --- a/R/prep.tree.R +++ b/R/prep.tree.R @@ -10,6 +10,9 @@ prep.tree <- function( stop('No parent column provided'); } + # Error on invalid tree structure + get.root.node(tree.df); + if ('angle' %in% colnames(tree.df)) { message(paste( 'Overriding branch angles will be supported in a future version.', From 7ad982693a08f6de31a7f6034776a38a894fae5f Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 1 Sep 2022 12:23:07 -0700 Subject: [PATCH 3/5] Unit tests for root node prep --- tests/testthat/test-prep.tree.R | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/testthat/test-prep.tree.R b/tests/testthat/test-prep.tree.R index 8589879..bfe8d00 100644 --- a/tests/testthat/test-prep.tree.R +++ b/tests/testthat/test-prep.tree.R @@ -205,3 +205,51 @@ test_that( expect_true(check.parent.values(node.names, parents)); }); + +test_that( + 'get.root.node handles valid NA root', { + parent <- c(2, NA, 1); + expected.root <- which(is.na(parent)); + + tree <- data.frame(parent = parent); + root <- get.root.node(tree); + + expect_equal(root, expected.root); + }); + +test_that( + 'get.root.node handles valid -1 root', { + parent <- c(2, -1, 1); + expected.root <- which(parent == -1); + + tree <- data.frame(parent = parent); + root <- get.root.node(tree); + + expect_equal(root, expected.root); + }); + +test_that( + 'get.root.node handles valid 0 root', { + parent <- c(2, 0, 1); + expected.root <- which(parent == 0); + + tree <- data.frame(parent = parent); + root <- get.root.node(tree); + + expect_equal(root, expected.root); + }); + +test_that( + 'get.root.node handles multiple root nodes', { + root.parent <- -1; + tree <- data.frame(parent = rep(root.parent, 2)); + + expect_error(get.root.node(tree), regexp = 'root') + }); + +test_that( + 'get.root.node handles a missing root node', { + tree <- data.frame(parent = 1:3); + + expect_error(get.root.node(tree), regexp = 'root') + }); \ No newline at end of file From a92bc20df630a68970bfed9c6228386434b19b5b Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 1 Sep 2022 12:25:11 -0700 Subject: [PATCH 4/5] Update changelog --- DESCRIPTION | 2 +- NEWS | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 19afa1b..72237f2 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: CancerEvolutionVisualization Title: Function to Generate Publication Quality Phylogenetic Tree Plots Version: 1.0.0 -Date: 2022-08-03 +Date: 2022-09-01 Authors@R: c( person("Paul Boutros", role = "cre", email = "PBoutros@mednet.ucla.edu"), person("Adriana Salcedo", role = "aut"), diff --git a/NEWS b/NEWS index 823c714..b0b4bb2 100644 --- a/NEWS +++ b/NEWS @@ -1,7 +1,8 @@ -CancerEvolutionVisualization 1.0.0 2022-08-03 (Dan Knight) +CancerEvolutionVisualization 1.0.0 2022-09-01 (Dan Knight) ADDED * Documentation for default colour scheme +* Checks for valid tree structure (root node) UPDATE * Fixed discrepancies between documentation and code From db001eac7cb5389c6d1254a680869f05860502d3 Mon Sep 17 00:00:00 2001 From: Dan Knight Date: Thu, 1 Sep 2022 12:26:18 -0700 Subject: [PATCH 5/5] Fix linting errors --- tests/testthat/test-prep.tree.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/testthat/test-prep.tree.R b/tests/testthat/test-prep.tree.R index bfe8d00..44a1ed2 100644 --- a/tests/testthat/test-prep.tree.R +++ b/tests/testthat/test-prep.tree.R @@ -213,7 +213,7 @@ test_that( tree <- data.frame(parent = parent); root <- get.root.node(tree); - + expect_equal(root, expected.root); }); @@ -224,7 +224,7 @@ test_that( tree <- data.frame(parent = parent); root <- get.root.node(tree); - + expect_equal(root, expected.root); }); @@ -235,7 +235,7 @@ test_that( tree <- data.frame(parent = parent); root <- get.root.node(tree); - + expect_equal(root, expected.root); }); @@ -252,4 +252,4 @@ test_that( tree <- data.frame(parent = 1:3); expect_error(get.root.node(tree), regexp = 'root') - }); \ No newline at end of file + });