Thanks, Emmanuel. I used lapply because the operation (pruning a bunch
of tips
from 1000s of trees) took a long time, but for less intensive jobs, it's good
to know that the for-loop will not have the effect of discarding the object's
attributes.
Stacey
Quoting Emmanuel Paradis <[EMAIL PROTECTED]>:
Since lists of trees have various attributes, it is better to use a
'for' loop for this kind of operation:
for (i in 1:length(phylist))
phylist[[i]]$tip.label <- c("G","H","I","J","K")
That's because lapply returns a list with the results, eventually
discarding the original attributes.
Le 01.09.2008 03:02, Simon Blomberg a écrit :
Hmm. I should try solutions before I post them. You need to make sure
that each tree in the list is of class phylo too. This works:
phylist<-read.tree(text="((((A:0.21,B:0.21):0.28,C:0.49):0.13,D:0.62):0.38,E:1.00);((((A:0.21,B:0.21):0.28,C:0.49):0.13,D:0.62):0.38,E:1.00);")
newnames<-c("G","H","I","J","K")
newlist <- lapply(phylist,
function(z) {
z$tip.label <- c("G","H","I","J","K")
class(z) <- "phylo"
This shouldn't be necessary because you modify an element of the object.
I've seen that the help page of write.tree needs to be updated since a
list a trees is accepted. The function may also be modified to accept
lists without the class "multiPhylo" (eg, if returned by lapply).
EP
z
})
class(newlist) <- "multiPhylo"
write.tree(newlist,file="newlist")
On Mon, 2008-09-01 at 10:55 +1000, Simon Blomberg wrote:
Try class(newlist) <- "multiPhylo"
Then use write.tree.
Cheers,
Simon.
On Sun, 2008-08-31 at 20:39 -0400, [EMAIL PROTECTED] wrote:
Hi all,
I have hit an obstacle and I hope someone will know a quick fix.
I want to read
a list of trees, do something to those trees and then write them
to a file. The list is seen as multiPhylo until I apply some
function then it becomes a
list that I cannot write to a file with write.tree. I put an
example below,
where I read in two trees, and then use a function to change the
tip names and
then try to write the trees to a file.
Thanks in advance for your help!
Stacey
phylist<-read.tree(text="((((A:0.21,B:0.21):0.28,C:0.49):0.13,D:0.62):0.38,E:1.00);
((((A:0.21,B:0.21):0.28,C:0.49):0.13,D:0.62):0.38,E:1.00);")
class(phylist)
[1] "multiPhylo"
newnames<-c("G","H","I","J","K")
newlist <- lapply(phylist,
+ function(z) {
+ z$tip.label <- c("G","H","I","J","K")
+ z
+ })
write.tree(newlist,file="newlist")
Error in write.tree(newlist, file = "newlist") :
object "phy" is not of class "phylo"
(and yes, write.tree did work on the multiphylo object before I did the
function)
_______________________________________________
R-sig-phylo mailing list
R-sig-phylo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-phylo
--
Emmanuel Paradis
IRD, Montpellier, France
ph: +33 (0)4 67 16 64 47
fax: +33 (0)4 67 16 64 40
http://ape.mpl.ird.fr/
_______________________________________________
R-sig-phylo mailing list
R-sig-phylo@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-phylo