如何在R中执行for循环



你好,我需要找到一个区间在-1和1之间的随机数样本的平均值,置信区间为95%,然后重复这个过程50次,我使用的是计算50次重复平均值的for循环,但当我将其应用于置信区间时,它不会计算标准偏差。我有这个代码

for (i in 1:50) {
n<-100
z[i] <-runif(min=-1,max=1,n)
m[i] <-mean(z[i])
s[i] <-sd(z[i])
sigma[i] <-1.96*(s[i] /sqrt(n)) 
ls[i] <-m[i] +sigma[i]
li[i] <-m[i] -sigma[i]
}

您不需要for循环,您需要应用的所有函数都是矢量化的,因此您可以执行:

simulation <- function(n){
z <-runif(min=-1,max=1,n)
m <-mean(z)
s <-sd(z)
sigma <-1.96*(s /sqrt(n)) 
ls <-m +sigma
li <-m -sigma

return(list(m=m, s=s, sigma=sigma, ls=ls, li=li))
}

示例

> set.seed(1)
> simulation(n=50)
$m
[1] 0.06518574
$s
[1] 0.544478
$sigma
[1] 0.1509216
$ls
[1] 0.2161073
$li
[1] -0.08573586

如果你想复制模拟函数n次,那么replicate会对你有所帮助,参见示例:

> set.seed(1)
> replicate(5, simulation(n=50))
[,1]        [,2]       [,3]          [,4]       [,5]       
m     0.06518574  0.00620252 -4.981729e-05 0.06993695 -0.04302099
s     0.544478    0.5295532  0.5554962     0.5348175  0.541016   
sigma 0.1509216   0.1467847  0.1539757     0.1482439  0.149962   
ls    0.2161073   0.1529872  0.1539259     0.2181808  0.106941   
li    -0.08573586 -0.1405821 -0.1540255    -0.0783069 -0.192983  

我用50码进行了5次模拟,得到了一个矩阵。

m <- c()
s <- c()
ls <- c()
li <- c()
n <- 100
for (i in 1:50) {
z <-runif(min=-1,max=1,n)
m[i] <-mean(z)
s[i] <-sd(z)
sigma <- 1.96*(s[i] /sqrt(n)) 
ls[i] <- m[i] +sigma
li[i] <- m[i] -sigma
}

最新更新