jschenk
2018-04-09 14:46:37 UTC
Hi Folks,
I have been banging my head against what appears to be an easy coding problem for a while now and haven’t been able to hack my way out of it. I am running a function to identify a posterior set of node ages for a particular node. The function I wrote works just fine, but when I use lapply to sample across a posterior distribution, I get the “not of class ‘phylo’” error, even when I input a single tree of class phylo. I have tried every typical solution (e.g., reassigning class), but haven’t identified a solution. Does anyone know a workaround?
Please see the example code below.
Thanks,
John
library(ape)
#simulate a single tree with 20 tips
simtree <- rtree(20)
#Make sure the tree exists
plot(simtree)
#Function I wrote to find a node and then tell me the age of the node. I realize that the simulated tree is not ultrametric in this example, in real life it will be - ultrametric trees also result in the same error
AgeDensity <- function(phy, species1, species2){
NodeNumber <- mrca(phy)[species1, species2]
ages <- branching.times(phy)[as.character(NodeNumber)]
return(as.numeric(ages))
}
#check the class of the tree object, it will say that it is of class phylo
class(simtree)
#Run my function AgeDensity and it works just fine
AgeDensity(simtree, "t3", "t15")
#When I use the lapply function, I get an error that the object is not a of class phylo, although I already verified that it is of class phylo.
lapply(simtree, AgeDensity, species1="t3", species2="t15")
#here is the same analysis conducted with multiple trees
multiTrees <- rmtree(20, 10)
class(multiTrees)
#I get the same error when I run my function across multiple trees
lapply(multiTrees, AgeDensity, species1="t3", species2="t15")
______________________________________________________________
John J. Schenk, Ph.D.
Assistant Professor of Plant Biology
Georgia Southern University Herbarium (GAS), Curator
Department of Biology
4324 Old Register Road
Georgia Southern University
Statesboro, GA 30460-8042
Office: 2260 Biology Building
Office phone: (912) 478-0848
Lab website: sites.google.com/a/georgiasouthern.edu/schenk
Herbarium website: sites.google.com/a/georgiasouthern.edu/gasherbarium
[[alternative HTML version deleted]]
_______________________________________________
R-sig-phylo mailing list - R-sig-***@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-phylo
Searchable archive at http://www.mail-archive.com/r-sig-***@r-project.org/
I have been banging my head against what appears to be an easy coding problem for a while now and haven’t been able to hack my way out of it. I am running a function to identify a posterior set of node ages for a particular node. The function I wrote works just fine, but when I use lapply to sample across a posterior distribution, I get the “not of class ‘phylo’” error, even when I input a single tree of class phylo. I have tried every typical solution (e.g., reassigning class), but haven’t identified a solution. Does anyone know a workaround?
Please see the example code below.
Thanks,
John
library(ape)
#simulate a single tree with 20 tips
simtree <- rtree(20)
#Make sure the tree exists
plot(simtree)
#Function I wrote to find a node and then tell me the age of the node. I realize that the simulated tree is not ultrametric in this example, in real life it will be - ultrametric trees also result in the same error
AgeDensity <- function(phy, species1, species2){
NodeNumber <- mrca(phy)[species1, species2]
ages <- branching.times(phy)[as.character(NodeNumber)]
return(as.numeric(ages))
}
#check the class of the tree object, it will say that it is of class phylo
class(simtree)
#Run my function AgeDensity and it works just fine
AgeDensity(simtree, "t3", "t15")
#When I use the lapply function, I get an error that the object is not a of class phylo, although I already verified that it is of class phylo.
lapply(simtree, AgeDensity, species1="t3", species2="t15")
#here is the same analysis conducted with multiple trees
multiTrees <- rmtree(20, 10)
class(multiTrees)
#I get the same error when I run my function across multiple trees
lapply(multiTrees, AgeDensity, species1="t3", species2="t15")
______________________________________________________________
John J. Schenk, Ph.D.
Assistant Professor of Plant Biology
Georgia Southern University Herbarium (GAS), Curator
Department of Biology
4324 Old Register Road
Georgia Southern University
Statesboro, GA 30460-8042
Office: 2260 Biology Building
Office phone: (912) 478-0848
Lab website: sites.google.com/a/georgiasouthern.edu/schenk
Herbarium website: sites.google.com/a/georgiasouthern.edu/gasherbarium
[[alternative HTML version deleted]]
_______________________________________________
R-sig-phylo mailing list - R-sig-***@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-phylo
Searchable archive at http://www.mail-archive.com/r-sig-***@r-project.org/