我正在尝试在R的geiger包中执行tip.disparity函数。
我的数据:
Family Length Wing Tail
Alced 2.21416 1.88129 1.66744
Brachypt 2.36734 2.02373 2.03335
Bucco 2.23563 1.91364 1.80675
当我使用“name.check”函数检查我的数据中的名称与我树上的名称相匹配时,它会返回
$data.not.tree
[1] "1" "10" "11" "12" "2" etc
显示它是指按编号指定的名称。我试过转换为角色矢量等
我尝试用
运行它data.names=NULL
我只是想编辑我的数据框,以便包与我树中的名称匹配(树是newick格式)
希望这更清楚 感谢
答案 0 :(得分:2)
我相信线索在文档(?check.names
)中:
data.names: names of the tips in the order of the data; if this is not
given, names will be taken from the names or rownames of the
object data
如果您希望程序返回数据框中包含但在树中不存在的分类单元的名称,则需要将相应的名称指定为数据框的行名称,或者单独指定它们。 data.names
参数。请注意,数据框的默认行名称是字符等同于行号,正是您在上面看到的......
修改:
R无法猜测(或不希望)名称包含在数据框的Family
元素中。试试:
check.names(traitdata,tree,data.names=as.character(traitdata$Family))
从长远来看,可能会更好:
rownames(traitdata) <- as.character(traitdata$Family)
traitdata <- subset(traitdata,-Family)
check.names(traitdata,tree)
因为您不希望在您的特征数据集中包含Family
- 它是标识符,而不是特征......
如果你看一下包中给出的示例数据的结构:
data(geospiza)
geospiza.data
您可以看到分类名称包含在行名中,而不是作为数据框本身的列...
PS 它不像StackOverflow那样漂亮,但在r-sig-phylo@r-projects.org
有一个非常友好且活跃的R-for-phylogeny邮件列表......