2017-10-17 14 views
0

私は確認済みのRユーザーのためにいくつかの初心者の質問があります:-)。私は行が個人に対応し、列が異なるSNP遺伝子座での遺伝子型に対応する「遺伝子座」クラスのオブジェクトを持っている(人口情報の1列+):私は、で定義されている12の集団をplyr Rライブラリの 'ddply'コマンドを実行する際の問題

gen.loc Allelic data frame: 283 individuals 151 loci 1 additional variable

as.data.frame(gen.loc) population PBA10091 PBA10106 PBA10242 PBA10272 PBA11037 PBA11455 PBA11744 001 ANTE 01/02 01/01 01/01 02/02 02/02 02/02 01/01
002 ANTE 01/01 01/01 01/01 02/02 01/02 02/02 01/02
003 ANTE 01/01 02/02 01/01 02/02 02/02 01/02 01/01
004 ANTE 01/01 01/01 01/01 02/02 02/02 01/02 01/01
005 ANTE 01/02 02/02 01/01 02/02 02/02 02/02 01/02
006 ANTE 01/01 02/02 01/02 01/02 01/02 02/02 01/01

を有します私の "人口"の列。私は、各集団内の個体間の対の遺伝子型の距離を計算したいと思う。ちょうど1つのポップで

、コマンドは次のようになります

d <- dist.gene(gen.loc, method="pairwise", pairwise.deletion = TRUE, variance = FALSE)

それは個人間のペアごとの差異を持つクラス「distの」のオブジェクトを返します。

しかし、データフレームを「母集団」列の12レベルに従って分割し、このプロシージャを「適用」関数を使用して分解したいとします。

私はplyrライブラリの 'ddply' 関数を試してみました:

ddply(as.data.frame(gen.loc), as.data.frame(gen.loc)$population, function(e) dist.gene(e, method="pairwise", pairwise.deletion = TRUE, variance = FALSE))

残念ながら、このコマンドはエラーメッセージを返します。

Error in eval(expr, envir, enclos) : object 'ANTE' not found

'ANTE' が最初であることをデータフレームに現れるポップ、私は分裂が何とか間違って行ったと思います。また、dist.gene結果が実際のRデータフレームではなく「dist」オブジェクトであるという事実に問題がある可能性があります。

ここでddplyを使用するより良い方法はありますか?または、dist.geneコマンドを適用しながらデータフレームを分割する別の方法はありますか?さもなければ、私はポップごとに1つの入力データフレームを作成すると思います:-)ポップがたくさんある場合は便利です!

ありがとうございました!

すべてのベストを、

答えて

1

クリスこれは試してみてください?

df <- as.data.frame(gen.loc) 
split.df <- split(df, df$population) # split data frame into list by distinct population 
result <- lapply(split.df, function(i) dist.gene(i, method="pairwise", pairwise.deletion = TRUE, variance = FALSE)) # iterate through list and calculate pairwise distance 
関連する問題