如何从不抛出异常(`ars`)的库函数中捕获错误?

时间:2015-12-04 18:48:17

标签: r rpy2

我使用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抛出一个真正的异常或返回一些特殊值。

我怎样才能发现错误?

1 个答案:

答案 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)