【发布时间】:2017-06-26 00:02:09
【问题描述】:
我有一个数据 (delisle) 和以下代码,我的大数据矩阵需要几天时间才能运行。 ddply 的替代品是什么?有人请指导或帮助吗?
TYPE SAMPLE probeA probeB probeC
CatA 52 1.2 3.2 3.4
CatA 52 2.2 4.2 3.4
CatA 58 1.5 6.5 7.8
CatA 58 8.3 6.5 9.5
CatA 94 1.5 4.3 6.4
CatB 52 2.2 2.2 3.4
CatB 58 2.5 4.5 6.8
CatB 58 6.2 6.0 5.3
CatB 94 2.5 5.3 6.4
我使用 ddply 为每个“SAMPLE”、每个探针计算了 catA 和 catB 之间的倍数变化。
输出应该是:
SAMPLE 探针 FC
52 probeA mean(CatA)/mean(CatB)
52 probeB mean(CatA)/mean(CatB)
58 probeA mean(CatA)/mean(CatB)
58 probeB mean(CatA)/mean(CatB)
对于大数据(20K 行和 5K 列),我的代码非常慢:
probenames <- as.vector(colnames(delisle))
for (i in 3:ncol(delisle))
{
probe = probenames[i]
Stats <- function(gs) {
typeA.sub <- gs[which(gs$TYPE=="CatA"),]
typeB.sub <- gs[which(gs$TYPE=="CatB"),]
fc.AB = mean(typeA.sub[,i])/mean(typeB.sub[,i])
fc.AC =
fc.BC =
data.frame(probe,fc.AB, fc.AC, fc.BC)
}
output <- ddply(.data=delisle, .variables="SAMPLE", .progress=progress_text(style=3), Stats)
write.table(output,"SAMPLETYPE.txt",quote=F,sep="\t",append=T,col.names=F)
}
【问题讨论】:
-
我无法运行您的代码。似乎缺少关键部分。例如,
probnames是什么?您可能希望创建一个可重现的最小示例,以便我们更好地了解您想要的输出。 -
probenames
-
帮助任何人修改?
-
您能否运行
dput(df)以轻松重现您的data.frame?
标签: r performance plyr