我正在运行以下代码:
disc<-for (i in 1:33) {
m=n[i]
xbar<-sum(data[i,],na.rm=TRUE)/m
Sx <- sqrt(sum((data[i,]-xbar)^2,na.rm=TRUE)/(m-1))
Sx
i=i+1}
Run Code Online (Sandbox Code Playgroud)
运行它:
>disc
NULL
Run Code Online (Sandbox Code Playgroud)
为什么它给我NULL?
这是来自文档for,可通过?`for`以下方式访问 :
'for','while'和'repeat'无形地返回'NULL'.
也许你正在寻找以下几点:
library(plyr)
disc <- llply(1:33, function(i) {
m=n[i]
xbar<-sum(data[i,],na.rm=TRUE)/m
Sx <- sqrt(sum((data[i,]-xbar)^2,na.rm=TRUE)/(m-1))
Sx
})
Run Code Online (Sandbox Code Playgroud)
存在其他变体 - llin llply代表"list in,list out".也许您的预期最终结果是数据框或数组 - 存在适当的函数.
上面的代码是您的示例的简单转换.我们可以通过立即拆分data并忘记其他无用的计数变量来做得更好i(未经测试,因为您没有提供数据):
disc <- daply(cbind(data, n=n), .(), function(data.i) {
m=data.i$n
xbar<-sum(data.i,na.rm=TRUE)/m
sqrt(sum((data.i-xbar)^2,na.rm=TRUE)/(m-1))
})
Run Code Online (Sandbox Code Playgroud)
另请参见该plyr网站了解更多信息.
相关(如果不是重复):R - 如何将循环转换为R中的函数