首页 > 解决方案 > 如何多次迭代mapply

问题描述

我正在做一个蒙蒂霍尔问题模拟,并试图在 R 中获得置信区间的概率。

# set the door 
door <- c(1,2,3) 

# count success 
count <- 0

MontyHallchallenge3 <- function(a){
    for (i in 1:a) {
      car <- sample(door, 1)
      choice <- sample(door, 1)
      if(car == choice){
        host <- sample(setdiff(door, car), 1)
      }else{
        host <- setdiff(door, c(choice, car))
      }
      secondchoice <- setdiff(door, c(host, choice))
      if(secondchoice == car){
        count <- count + 1
      }
    }
    p = count/a
  return(mean(p))
}

b = c(2,10,100,1000)
mapply(MontyHallchallenge3, a = b)

a 是样本大小,并将其作为参数传递给函数。我得到了 a = 2,10,100,1000,我应该创建每个置信区间。现在,它只迭代一次并得到这些。

> mapply(MontyHallchallenge3, a = b)
[1] 0.500 0.800 0.660 0.642

我想为每个样本迭代 1000 次以获得置信区间。有没有办法在mapply()中设置迭代次数?

标签: r

解决方案


您可以使用replicate对每个值迭代 1000 次b并获取mean它。

b = c(2,10,100,1000)
sapply(b, function(x) mean(replicate(1000, MontyHallchallenge3(x))))

推荐阅读