r - 遍历列表并使用该列表中的元素

标签 r loops

在下面的代码中,我希望能够执行类似 p=(1:99)/100 的操作,然后循环遍历 p,而不是从 p=0.01 开始然后递增它。例如,让 p=(1:99)/100 而不是 p=0.01。现在,我尝试用 p 替换 for 循环中的 1:99。然而,当我运行代码时,我开始遇到 coverage[i] 的问题(它返回 numeric(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 
}

最佳答案

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

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)
}

这对我来说几乎是瞬间的。诀窍是矢量化这些模拟和计算。在我使用了 6 年的 Mac Pro 上,增加到 100,000 次模拟重复只用了 4 秒。

(您需要增加重复以查看结果中的结构;plot(p, coverage, las=1) 100k 次重复给出以下结果;不清楚仅重复 1000 次。) plot of coverage

关于r - 遍历列表并使用该列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7563680/

相关文章:

删除 cat() 之间的空格

java - 为什么我的字符串在经过 while 循环后不会更新?

python - 我怎样才能加快这段两行代码的速度?

javascript - 在循环中创建对象的元素

r - 计算季度时间序列的同比增长率

r - 添加条件以在 R 中扩展网格?

r - ggplot2 中更简单的人口金字塔

php - 如何使用phpmailer向多个地址逐个发送邮件?

excel - VBA - 从多个工作表和范围创建字典

r - 建立模型时,简短公式需要许多变量