Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在自定义函数R上进行for循环?_R_For Loop_Probability - Fatal编程技术网

如何在自定义函数R上进行for循环?

如何在自定义函数R上进行for循环?,r,for-loop,probability,R,For Loop,Probability,我编写了这个函数,它返回值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)) } 我想对500到1500之

我编写了这个函数,它返回值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))
}
我想对500到1500之间的样本量进行复制,以生成一个简单的散点图

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

x <- vector(length = 1000)

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

x

x正如@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)
#函数

bday.function正如@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)
#函数

bday.function你在找这样的东西吗


bday.function你在找这样的东西吗


bday.function我们没有复制代码的数据。你能发布它们吗?数据是由sample(1:365,sample.size,replace=TRUE)生成的。我从这段代码开始,并从那里构建了函数:data.frame(table(sample(1:365,500,replace=TRUE))。你能更新你的原始帖子,以显示在绘图和数据结构方面的预期结果吗?完成!函数“!any(data.frame(table(sample(1:365,sample.size,replace=TRUE)))$Var1==1)”返回一个真/假值,当在for循环中迭代1000次时,它返回1000个真/假值。这些值被强制为整数并计算平均值。我们没有数据来重现您的代码。你能发布它们吗?数据是由sample(1:365,sample.size,replace=TRUE)生成的。我从这段代码开始,并从那里构建了函数:data.frame(table(sample(1:365,500,replace=TRUE))。你能更新你的原始帖子,以显示在绘图和数据结构方面的预期结果吗?完成!函数“!any(data.frame(table(sample(1:365,sample.size,replace=TRUE)))$Var1==1)”返回一个真/假值,当在for循环中迭代1000次时,它返回1000个真/假值。这些值被强制为整数,并计算平均值。这绝对是我要找的!不幸的是,我这样做是为了完成一项指定用于R基循环的作业。尽管我知道使用sapply会容易得多,但我正在尝试练习我的R基来充实我的知识。这绝对是我想要的!不幸的是,我这样做是为了一个指定用于R基循环的作业。尽管知道使用sapply会容易得多,但我正在尝试练习我的R基来充实我的知识。你能解释一下vec和seq_的用法吗?这大大加快了我的代码速度,但对文档的扫描并没有告诉我为什么会这样。谢谢你的帮助@myfatson当然,
seq_along()
会创建一个从1到放置在函数中的对象长度的序列。而
vec
只是一个向量,也许这里的关键是使用
可以帮助您创建一个序列,如
1:5
将创建
1,2,3,4,5
。希望你明白:)你能解释一下vec和seq_的用法吗?这大大加快了我的代码速度,但对文档的扫描并没有告诉我为什么会这样。谢谢你的帮助@myfatson当然,
seq_along()
会创建一个从1到放置在函数中的对象长度的序列。而
vec
只是一个向量,也许这里的关键是使用
可以帮助您创建一个序列,如
1:5
将创建
1,2,3,4,5
。希望你明白:)
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")
#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)