首页 文章

运行plyr R库的'ddply'命令的问题

提问于
浏览
0

我对确认的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个人口 . 我想计算每个人群中个体之间的成对基因型距离 .

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

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

它返回类'dist'的对象,个体之间存在成对差异 .

但是,我想根据“population”列的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'是数据框中出现的第一个pop,我猜这个分裂出错了 . 此外,我猜可能存在一个问题,即dist.gene结果是'dist'对象而不是实际的R数据帧 .

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

谢谢你的帮助!

祝一切顺利,

Chrys

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
    

相关问题