运行代码时,我一直收到此错误消息,但我不确定该如何解决。
我的代码如下:
gwmh<-function(target,N,x,sigmasq){
p<-add.var()
samples<-c(x,p)
for(i in 2:N){
prop<-rnorm(1,0,sqrt(sigmasq))
if(runif(1)<min(1,(target(x+abs(prop)*p))/target(x))){
x<-x+prop
samples<-rbind(samples,c(x,p))} else{
p<--p
samples<-rbind(samples,c(x,p))
}
}
samples[(1:N)] ##delete after testing
}
错误说:if(runif(1) ((add.var是我创建的用于在{-1,1}中随机生成p的函数)
我测试了我的评论,并感到更愿意提供答案。
尝试以下操作
if(TRUE){print("Test")}
# prints "Test"
if(FALSE){print("Test")}
# prints nothing
if(NA){print("Test")}
# throws your error
因此在此表达式内:
runif(1)<min(1,(target(x+abs(prop)*p))/target(x))
结果既不是TRUE
也不是FALSE
,而是NA
,并且看到runif()
不应丢掉它必须出现在比较中的任何遗漏。