将行名称称为分析中的数字(geiger包)

时间:2011-08-24 17:08:12

标签: r phylogeny

我正在尝试在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格式)

希望这更清楚 感谢

1 个答案:

答案 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邮件列表......