R 如何将树重新缩放到极端形状?
尽管@jeremycg帮助我开发了以下代码,我还是再次发布了这篇文章。它的工作,但它没有执行我想要的! 一个快速提醒:我有一组树,我需要用一个叫做gamma的因子来测量,如果每个树的值不在定义的范围内,它会被重新缩放,直到它的值在定义的范围内。。。让我们试试这个例子:R 如何将树重新缩放到极端形状?,r,loops,tree,data-manipulation,phylogeny,R,Loops,Tree,Data Manipulation,Phylogeny,尽管@jeremycg帮助我开发了以下代码,我还是再次发布了这篇文章。它的工作,但它没有执行我想要的! 一个快速提醒:我有一组树,我需要用一个叫做gamma的因子来测量,如果每个树的值不在定义的范围内,它会被重新缩放,直到它的值在定义的范围内。。。让我们试试这个例子: library(ape) library(phytools) trees<- pbtree(b=1, n=100, nsim=50) fixmytrees <- function(tree, rescaleamt
library(ape)
library(phytools)
trees<- pbtree(b=1, n=100, nsim=50)
fixmytrees <- function(tree, rescaleamt = NULL){
if(is.null(rescaleamt)){
rescaleamt <- sample(seq(from = 0.1, to = 0.9, by = 0.1), 1)
}
if(is.na(gammaStat(tree))){return("bad tree")}
if(gammaStat(tree) < 6){
return(tree)
} else {
return(rescale(tree, model ="delta", rescaleamt))
}
}
z<-lapply(tree, fixmytrees)
#The script does rescale trees but they are not extreme enough. In this case if you try
gammaStat(z[[]]) #You would probably see values lower than 6 and sometimes NA!!!
库(ape)
图书馆(植物醇)
树首先,读取库并创建递归辅助函数:
library(ape)
library(geiger)
fixmytrees <- function(tree, rescaleamt = NULL){
if(is.null(rescaleamt)){
rescaleamt <- sample(seq(from = 0.1, to = 0.9, by = 0.1))
}
if(gammaStat(tree) >= 1){
return(tree)
} else {
return(fixmytrees(rescale(tree, "delta", rescaleamt), rescaleamt/2))
}
}
注意。这对您的数据不是一件明智的事情,因此请确保您知道为什么要这样做 谢谢jeremycg!它不需要另一个循环来遍历树列表吗?不,只需运行lappy
命令,输出是固定的树,因为gammaStat只接受phyllo对象,我想我们需要一个循环来从multiplyo对象中逐个读取树。也许这就是代码仍然不起作用的原因,对吧?它返回一个列表:zI在做了一些修改后再次发布了它!偶然错误:较长的对象长度不是较短对象长度的倍数
lapply(trees, fixmytrees)