0

既知の回数繰り返したいプロセスがありますが、問題があります。最初の反復は元のデータセットを使用し、次は最初の結果を使用し、次は 2 番目の結果を使用する必要があります。

いくつかの背景: データセットは typephyloであるため、ループappend内の関数forは意味がありません。以下が実際のコードです。

library(ape)
library(geiger)

clade.dropper <- function(phy, drop.tips) {
new.phy <- drop.tip(phy, tips(phy, drop.tips[1]))
new.phy <- drop.tip(new.phy, tips(new.phy, drop.tips[2]))
new.phy <- drop.tip(new.phy, tips(new.phy, drop.tips[3]))
new.phy <- drop.tip(new.phy, tips(new.phy, drop.tips[4]))
new.phy <- drop.tip(new.phy, tips(new.phy, drop.tips[5]))
new.phy
}

上記のハードコーディングを防ぎ、どういうわけか、系統樹のヒント名を含む特定のリストをループしてドロップできるようにしたいと思います。

ありがとう!

4

2 に答える 2

3

あなたのアプローチにはいくつかの問題があります-ツリーノードは、サブセット化するたびに再描画されます-ノード番号でサブセット化する場合、ノードを削除するたびに、次のトリムで、次のノードが必要なノードではない可能性があります(私は以前にこの痛ましい間違いを犯したことがあります)。

名前でサブセット化する場合は問題ないかもしれませんが、ほとんどのツリーにはノード名がありません。

私たちにできることは、一度に削除したいすべてのヒントのリストを作成してから、一度にすべてをトリミングすることです.

geigerと の使用ape:

library(geiger)
library(ape)

最初にツリーをロードします。

geo <- get(data(geospiza))

ヒント関数が適切にベクトル化されていません。修正しましょう。

vtips <- Vectorize(tips, "node") 

これで、それらを一度にドロップできます。

todrop <- c(18,20)
drop.tip(geo$phy, unlist(vtips(geo$phy, todrop)))

あなたの例:

drop.tip(phy, unlist(vtips(phy, cladenum)))
于 2015-08-10T17:33:54.790 に答える