我是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)
现在它似乎给了我正确的结果.谁可以在这件事上启发我并告诉我我做错了什么?
我知道你没有要求它,但这里有一个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)