FOR循环在R中没有结果或错误

Ay_*_*y_M 0 if-statement r

我正在运行以下代码:

 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?

krl*_*mlr 5

这是来自文档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中的函数