I just added a few more functions to the Rphylip project, my R interface for the PHYLIP package. The new interface functions are Rpars (for PARS), Rmix (for MIX), and Rpenny (for PENNY). All three of these are parsimony method programs: the first does heuristic MP search from unordered, multistate data; whereas the latter do (Wagner, Camin-Sokal, or mixed method) MP searching using heuristic or branch-and-bound algorithms, respectively. More details on the programs can be found by referring to the PHYLIP documentation pages linked above.
I also created a new class of data object, "phylip.data", which just generalizes "proseq" (in Rphylip) and "DNAbin" (in ape), and is very simple.
Here's a quick demo using Rpenny. Note that branch-and-bound should generally not be used for more than a dozen or so taxa (it will become computationally prohibitive quickly).
Loading required package: Rphylip
Loading required package: ape
> packageVersion("Rphylip")
[1] ‘0.1.14’
> data(primates.bin)
> primates.bin
12 character value sequences stored in a matrix.
All sequences of same length: 231
Labels: Lemur Tarsier Sq.Monkey J.Macaque R.Macaque E.Macaque ...
Trait value composition:
0 1
0.406 0.594
> tree<-Rpenny(primates.bin)
....
How many
trees looked Approximate
at so far Length of How many percentage
(multiples shortest tree trees this long searched
of 100): found so far found so far so far
---------- ------------ ------------ ------------
1 - 0 0.00
2 - 0 0.00
3 - 0 0.00
4 208.00000 3 0.00
5 208.00000 6 0.00
6 208.00000 6 0.14
7 208.00000 6 1.90
8 208.00000 6 6.67
9 208.00000 6 9.33
10 208.00000 6 14.00
11 208.00000 6 37.78
12 208.00000 6 53.33
Output written to file "outfile"
Trees also written onto file "outtree"
Press enter to quit.
Penny algorithm, version 3.695
branch-and-bound to find all most parsimonious trees
Wagner parsimony method
requires a total of 208.000
6 trees in all found
+--------------------------------1
!
! +-----------------------------2
! !
--1 ! +-----10
! ! +-10
! ! ! ! +--11
! ! +--6 +--8
! ! ! ! +--12
+--2 +-----------5 !
! ! ! +--------9
! ! !
! ! +-----------8
! +--4
! ! ! +-----6
! ! ! +-11
! ! ! ! ! +--5
+--3 +--------------7 +--9
! ! +--7
! !
! +--------4
!
+--------------------------3
remember: this is an unrooted tree!
....
Translation table
-----------------
1 Lemur
2 Tarsier
3 Sq.Monkey
4 J.Macaque
5 R.Macaque
6 E.Macaque
7 B.Macaque
8 Gibbon
9 Orangutan
10 Gorilla
11 Chimp
12 Human
Rooted tree(s) with the outgroup
------------------------
Tarsier, Lemur
> require(phytools)
Loading required package: phytools
Loading required package: maps
Loading required package: rgl
> par(mfrow=c(3,2))
> plotTree(tree)
Waiting to confirm page change...
(These are the six equally most parsimonious trees found by PENNY.)
Cool. The latest version of Rphylip can be downloaded here, and is also on GitHub.