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引数で個別に指定する必要があります。データフレームのデフォルトの行名は、行番号に相当する文字であり、上に表示されているものとまったく同じであることに注意してください...

上記の追加情報に基づいて編集します。

FamilyRは、名前がデータフレームの要素に含まれていることを推測できません(または推測したくありません) 。試す:

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 に答える