运行问题' ddply' plyr R library

时间:2017-10-17 14:22:14

标签: r plyr

我对确认的R用户有一些新手问题:-)。我有一个班级" loci"对应于个体的行,以及对应于不同SNP基因座的基因型的列(对于群体信息,+ 1列):

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个人口在我的人口和#34;柱。我想计算每个人群中个体之间的成对基因型距离。

只有一个弹出窗口,命令为:

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

它返回一个类&#39; dist&#39;与个体之间的成对差异。

但是,我想根据&#34;人口&#34;的12个级别来分割我的数据帧。列,并使用&#39; apply&#39;分解此过程。功能。

我尝试过&#39; ddply&#39; plyr 库的功能:

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

&#39; ANTE&#39;作为第一个出现在数据框中的pop,我觉得分裂出错了。另外,我猜想 dist.gene 结果可能会出现问题。对象而不是实际的R数据帧。

这里有更好的方法来使用ddply吗?或者在应用 dist.gene 命令时分割我的数据帧的另一种方法?否则我想我只会为每个pop创建一个输入数据帧... :-)如果有一个大量的pop,虽然不方便!!

感谢您的帮助!

一切顺利,

Chrys

1 个答案:

答案 0 :(得分: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