【问题标题】:Issues running 'ddply' command of plyr R library运行 plyr R 库的“ddply”命令的问题
【发布时间】:2018-03-29 06:46:14
【问题描述】:

我对已确认的 R 用户有一些新手问题 :-)。我有一个“基因座”类的对象,其行对应于个体,列对应于不同 SNP 基因座的基因型(+ 1 列用于人口信息):

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

as.data.frame(gen.loc) 人口 PBA10091 PBA10106 PBA10242 PBA10272 PBA11037 PBA11455 PBA11744 001 前 01/02 01/01 01/01 02/02 02/02 02/02 01/01
002 前 01/01 01/01 01/01 02/02 01/02 02/02 01/02
003 前 01/01 02/02 01/01 02/02 02/02 01/02 01/01
004 前 01/01 01/01 01/01 02/02 02/02 01/02 01/01
005 安特 01/02 02/02 01/01 02/02 02/02 02/02 01/02
006 前 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 个级别拆分我的数据框,并使用“应用”函数分解此过程。

我尝试了 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 结果是“dist”对象而不是实际的 R 数据框这一事实可能存在问题。

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

感谢您的帮助!

一切顺利,

克里斯

【问题讨论】:

    标签: r plyr


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2015-05-12
      • 1970-01-01
      • 2012-08-18
      • 2011-03-28
      • 2014-11-03
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      相关资源
      最近更新 更多