/working/auteur/R/ultrametricize.R

http://github.com/eastman/auteur · R · 17 lines · 16 code · 1 blank · 0 comment · 3 complexity · d8607e1c51e00ac26549d28a3cba3256 MD5 · raw file

  1. ultrametricize=function(phy, tol=1e-8, trim=c("min","max","mean")){
  2. paths=pathlengths(phy)
  3. trim=switch(match.arg(trim),
  4. min = min(paths),
  5. max = max(paths),
  6. mean = mean(paths))
  7. if(diff(range(paths))<=tol) {
  8. for(i in 1:length(paths)){
  9. e=phy$edge.length[which(phy$edge[,2]==i)->bl]
  10. phy$edge.length[bl]=e+(trim-paths[i])
  11. }
  12. return(phy)
  13. } else {
  14. stop("Difference in path lengths is larger than supplied tolerance")
  15. }
  16. }