R:带有 ddply 的 for 循环

标签 r for-loop plyr

我是 R 和 stackoverflow 的新手,所以如果问题或其格式不理想,我很抱歉......

我正在尝试使用 ddply 从矩阵中获取一些基本统计数据,并且我想通过使用 for 循环来加快处理速度。不幸的是,这并不像我想象的那么容易......

Strain  gene1         gene2      gene3  .   .   .
 A    2.6336700     1.42802     0.935742
 A    2.0634700     2.31232     1.096320
 A    2.5798600     2.75138     0.714647
 B    2.6031200     1.31374     1.214920
 B    2.8319400     1.30260     1.191770
 B    1.9796000     1.74199     1.056490
 C    2.4030300     1.20324     1.069800
 .
 .
 .
----------

for (n in c("gene1","gene2","gene3","gene4")) {
  summary <- ddply(Data, .(Strain), summarise,
                mean = mean(n),
                sd   = sd(n),
                se   = sd(n) / sqrt(length(n)) )
}

结果显示 mean = 6 并且 sd 和 se 都是“NA”……显然不是我的想法。

如果我摆脱 for 循环并手动插入列名(“gene1”):
summary <- ddply(Data, .(Strain), summarise,
              mean = mean(gene1),
              sd   = sd(gene1),
              se   = sd(gene1) / sqrt(length(gene1)) )

现在它似乎给了我正确的结果。有人可以在这件事上启发我并告诉我我做错了什么吗?

最佳答案

只需使用 colwise (mean) , colwise(sd) , 和 colwise(length) .不需要 for loop

library(plyr)

ddply(mtcars,.(cyl), colwise(mean))



cyl      mpg     disp        hp     drat       wt     qsec        vs        am     gear     carb
1   4 26.66364 105.1364  82.63636 4.070909 2.285727 19.13727 0.9090909 0.7272727 4.090909 1.545455
2   6 19.74286 183.3143 122.28571 3.585714 3.117143 17.97714 0.5714286 0.4285714 3.857143 3.428571
3   8 15.10000 353.1000 209.21429 3.229286 3.999214 16.77214 0.0000000 0.1428571 3.285714 3.500000

以你为例,
ddply(df,.(Strain),colwise(mean))

关于R:带有 ddply 的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18719041/

相关文章:

在变量幂集中运行线性模型

r - 将标题放在图的左上角

r - 如何编写一个for循环来组合几个用R中的前向管道运算符制作的数据帧?

r - 无法使用 plyr 包和使用列表

r - 如何使用 Plyr、Apply 或类似方法矢量化此 R 代码?

r - 无法调整ggplot中的次 Axis 比例

r - gSimplify 不简化 R 中的 shapefile

c - C 中的 "for"循环后面是否需要 "{}"?

html - 如何在 INPUT 标签上没有 ID 属性的情况下使用 LABEL 标签的 FOR 属性

R:期间(月)的左侧移动平均线