循环遍历列表并使用该列表中的元素

use*_*224 2 loops r

在下面的代码中,我不是以p = 0.01开始然后递增它,而是希望能够执行类似p =(1:99)/ 100的操作,然后循环执行p.例如,代替p = 0.01,让我们让p =(1:99)/ 100.现在,我尝试用p替换我的for循环中的1:99.但是,当我运行代码时,我开始遇到coverage [i]的问题(它返回数字(0)).看起来这应该是相当微不足道的,所以我希望我只是在我的代码中忽略了一些东西.

此外,如果你看到任何容易提高的效率,请随时加入!谢谢=)

w=seq(.01,.99,by=.01)
coverage=seq(1:99)
p=0.01

for (i in 1:99){
    count = 0
    for (j in 1:1000){
        x = rbinom(30,1,p)  
        se=sqrt(sum(x)/30*(1-sum(x)/30)/30)
        if( sum(x)/30-1.644854*se < p && p < sum(x)/30+1.644854*se )
        count = count + 1
    }
    coverage[i]=count/1000
    print(coverage[i])
    p=p+0.01 
}
Run Code Online (Sandbox Code Playgroud)

Kar*_*arl 7

我会在中间部分而不是外部循环上工作.

coverage <- p <- 1:99/100
z <- qnorm(0.95)

for (i in seq(along=p) ){
  # simulate all of the binomials/30 at once
  x <- rbinom(1000, 30, p[i])/30

  # ses
  se <- sqrt(x * (1-x)/30)

  # lower and upper limits
  lo <- x - z*se
  hi <- x + z*se

  # coverage
  coverage[i] <- mean(p[i] > lo & p[i] < hi)
}
Run Code Online (Sandbox Code Playgroud)

这几乎是我的瞬间.诀窍是矢量化那些模拟和计算.在我6岁的Mac Pro上,增加到100,000个模拟重复只用了4秒钟.

(你需要增加重复数以查看结果中的结构; plot(p, coverage, las=1)100k reps给出以下结果; 仅用1000次重复就不清楚了.) 覆盖范围