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.


Either an object of class phyDat, in which case returned trees will be perfectly compatible with each character in constraint; or a tree of class phylo, in which each node in constraint will occur in the returned tree. 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(), TreeNumber, TrivialTree


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))