Constructs an approximation to a neighbour-joining tree, modified in order to be consistent with a constraint. Zero-length branches are collapsed at random.

ConstrainedNJ(dataset, constraint, weight = 1L, ratio = TRUE, ambig = "mean")



A phylogenetic data matrix of phangorn class phyDat, whose names correspond to the labels of any accompanying tree.


An object of class phyDat; returned trees will be perfectly compatible with each character in constraint. See vignette for further examples.


Numeric specifying degree to up-weight characters in constraint.

ambig, ratio

Settings of ambig and ratio to be used when computing Hamming() distances between sequences.


ConstrainedNJ() returns a tree of class phylo.

See also

Other tree generation functions: GenerateTree, NJTree(), SingleTaxonTree(), TreeNumber


Martin R. Smith (


dataset <- MatrixToPhyDat(matrix(
  c(0, 1, 1, 1, 0, 1,
    0, 1, 1, 0, 0, 1), ncol = 2,
  dimnames = list(letters[1:6], NULL)))
constraint <- MatrixToPhyDat(
  c(a = 0, b = 0, c = 0, d = 0, e = 1, f = 1))
plot(ConstrainedNJ(dataset, constraint))