我使用ars
(自适应拒绝采样)库从凹密度分布中采样给定变量。
问题是ars
功能打印" ifault代码"当出现问题时,显然它不会引发任何异常。
library(ars)
f<-function(x,mu=0,sigma=1){-1/(2*sigma^2)*(x-mu)^2}
fprima<-function(x,mu=0,sigma=1){-1/sigma^2*(x-mu)}
# mysample<-ars(1,f,fprima,mu=2,sigma=3) # it gives no errors
mysample<-ars(1,f,fprima,mu=2,sigma=3, x=c(2,4)) # bad choice of x
hist(mysample)
问题是我使用ars
从python调用rpy2
函数,我需要我的程序知道ars
是否能够生成样本。也就是说,我希望ars
抛出一个真正的异常或返回一些特殊值。
我怎样才能发现错误?
答案 0 :(得分:2)
重写代码,使结论部分符合您的要求。这可能是函数最后部分的一种可能变体:
ars2 <- function (n = 1, f, fprima, x = c(-4, 1, 4), ns = 100, m = 3,
emax = 64, lb = FALSE, ub = FALSE, xlb = 0, xub = 0, ...)
{
# leave top portion the same
#......
else {
return( list(msg= "Error in sobroutine sample_...", ifault= sample$ifault))
}
}
}
else {
return( list(msg="\nError in sobroutine initial_...", ifault= initial$ifault))
}
return(mysample)
}
# Then finish up by setting the environment for ars2
environment(ars2) <- environment(ars)