我对确认的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
答案 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