2017-10-17 44 views
0

我對確認的R用戶有一些新手問題:-)。我有類的「基因座」的對象與對應於個人的行,和對應於在不同的SNP位點的基因型列(+人口信息1列):運行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

我中定義的12羣我的「人口」專欄。我想計算每個人羣內個體之間的成對基因型距離。

只需一個流行的命令是:

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

它返回與個人之間的配對差異類「DIST」的對象。

但是,我想根據「人口」列的12個級別來分割我的數據框,並使用'apply'函數將此過程分解。

我試圖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」對象而不是實際的R數據幀。

有沒有更好的方法在這裏使用ddply?或者應用dist.gene命令時分割我的數據幀的另一種方法?否則,我想我會只是創建一個輸入數據幀每個彈出... :-)不方便,如果一個有大量的流行,但!

感謝您的幫助!

一切順利,

Chrys

回答

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