R:与ddply for循环

use*_*233 5 for-loop r plyr

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

我试图通过使用ddply从矩阵中获取一些基本统计数据,我想通过使用for -loop使进程更快一些.不幸的是,这并不像我想象的那么容易......

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)) )
}
Run Code Online (Sandbox Code Playgroud)

在结果中,它读取平均值= 6并且sd和se都是"NA"......显然不是我想到的.

如果我摆脱for -loop并手动插入列名("gene1"):

summary <- ddply(Data, .(Strain), summarise,
              mean = mean(gene1),
              sd   = sd(gene1),
              se   = sd(gene1) / sqrt(length(gene1)) )
Run Code Online (Sandbox Code Playgroud)

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

nog*_*pes 2

我知道你没有要求它,但这里有一个aggregatein的解决方案base

# One line in base.
aggregate(Data[paste0('gene',1:3)],by=Data['Strain'],
     function(x) c(mean=mean(x),sd=sd(x),se=sd(x)/sqrt(length(x))))
Run Code Online (Sandbox Code Playgroud)