错误代码 R 中需要 TRUE/FALSE 的缺失值



当我运行代码时,我不断收到此错误消息,我不确定我需要做什么来修复它。

我的代码如下:

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()不应该在比较的 RHS 中抛出任何缺失。

假设targetxsigmasq都是来自 df 的值,而不是函数,那么那里可能缺少一个值。如果是这种情况,并且还打算添加异常来捕获和处理这些可能如下所示的缺失:

# test being your test expression
if(
if(is.na(test) {Do Stuff for missing values}
else {original IF statement}

您需要将na.rm=TRUE添加到min函数中以考虑x中可能的NA

。如果函数包含 NA,则函数将失败x

target <- function(x) dnorm(x, 0, 1) 
add.var <- function() runif(1, -1, 1)
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), na.rm=TRUE)){  # <- Here
x<-x+prop
samples<-rbind(samples,c(x,p))} else{
p<--p
samples<-rbind(samples,c(x,p))
}
}
samples[(1:N)]  ##delete after testing
} 

现在尝试:

gwmh(target, N=2, x=c(1,2,NA,3), sigmasq=2)
# [1] 1.00 3.14

最新更新