0

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

希望这更清楚谢谢

4

1 回答 1

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-for-phylogeny 邮件列表r-sig-phylo@r-projects.org...

于 2011-08-24T17:32:42.007 回答