首页 > 解决方案 > 如何对自定义函数R进行for循环?

问题描述

我编写了这个函数,它返回值 1 在针对不同样本大小迭代 1000 次时没有出现在随机样本中的概率。

bday.function <- function(sample.size){
  x <- vector()
  for (i in 1:1000){
  x[i] <- !any(data.frame(table(sample(1:365, sample.size, replace=TRUE)))$Var1 == 1)
}
  return(mean(x))
}

现在我想使用这个函数和另一个 for 循环来计算 500 到 1500 之间每个样本大小的概率,并为我的结果制作一个简单的散点图。这是我尝试过的:

z <- vector()
for (i in 500:1500) {
  z[i] <- bday.function(i)
  return(plot(z))
}

编辑:当我运行 bday.function 时,输出是 TRUE 值的数量除以总(1000)TRUE/FALSE 结果:

bday.function(750)
[1] 0.122

我想为 500 到 1500 之间的样本大小复制这个以生成简单的散点图

编辑2:感谢大家的帮助!这是我的最终解决方案:

x <- vector(length = 1000)

for (i in 1:1000){
  x[i] <- !any(sample(1:365, 500, replace=TRUE) == 1) 
}

x
bday.function <- function(sample.size){
  x <- vector(length= 1000)
  for (i in 1:1000){
  x[i] <- !any(sample(1:365, sample.size, replace=TRUE) == 1) 
}
  return(mean(x))
}
bday.function(750)
z <- vector(length = 1000)
tmp.index <- 500:1500
for (i in seq_along(tmp.index)) {
  z[i] <- bday.function(tmp.index[i])
}
#Plot
plot(tmp.index, z, xlab = "sample size", ylab = "Probability of no birthdays")

在此处输入图像描述

标签: rfor-loopprobability

解决方案


正如@JohnColeman在他的睿智评论中指出的那样,您的功能可能很慢。尝试对您的代码进行这些更改以进行打印输出。我只运行了 60 次模拟人生,因为我需要完成其他事情:

#Function
bday.function <- function(sample.size){
  x <- vector()
  for (i in 1:1000){
    x[i] <- !any(data.frame(table(sample(1:365, sample.size, replace=TRUE)))$Var1 == 1)
  }
  return(mean(x))
}
#Loop
z <- vector()
vec <- 500:1500
for (i in seq_along(vec)) {
  z[i] <- bday.function(vec[i])
}
#Plot
plot(z)

输出:

在此处输入图像描述


推荐阅读