【发布时间】:2019-04-11 20:19:55
【问题描述】:
我有以下算法(基于this algorithm)
- 生成U
- 定义 x=0,P=(1-p)^n 和 F=P
- 如果 U
- 定义 P=(n-x)pP/(x+1)(1-p)、F=F+P 和 x=x+1
- 回到第 3 步。
据我所知,r 将是
varBinom<-function(n,p)
{
U<-runif(n)
x<-0
P<-(1-p)^n
FF<-P
for(i in 1:n)
{
if(U<FF)
{
X<-x
break
}
P<-(n-x)*p*P/(x+1)*(1-p)
FF<-FF+P
x<-x+1
}
return(x)
}
但是,在编译代码时,我收到十条警告消息,它们都说:
警告信息: 1: 在 if (U 1 并且只使用第一个元素
为什么会这样? 如何修复代码?
【问题讨论】:
-
好吧,你似乎从来没有在你的循环中使用
i。这似乎有点奇怪。而U似乎是一个向量,所以不清楚if(U<FF)是什么意思,因为U中的任何值、部分值或所有值都可能小于FF,所以不清楚你想要什么.也许你的意思是if (U[i] < FF[i])? -
@MrFlick 是的,这就是我的想法,将 U 视为一个 n 向量,因此在调用函数时输出将是 n 个二项式随机变量,但我想可以用 @987654332 来修复@函数
标签: r random simulation