如何从不抛出异常(`ars`)的库函数中捕获错误?
How to capture errors from a library function that throws no exceptions (`ars`)?
我正在使用 ars
(自适应拒绝采样)库从凹密度分布中采样给定变量。
问题是 ars
函数在出错时打印“ifault codes”,但显然它不会抛出任何异常。
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)
问题是我使用 rpy2
从 python 调用了 ars
函数,我需要我的程序知道 ars
是否能够生成样本。也就是说,我希望 ars
抛出一个真正的异常或 return 一些特殊值。
如何捕获错误?
重写代码,使结论部分符合您的要求。这可能是函数最后部分的一种可能变体:
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)
我正在使用 ars
(自适应拒绝采样)库从凹密度分布中采样给定变量。
问题是 ars
函数在出错时打印“ifault codes”,但显然它不会抛出任何异常。
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)
问题是我使用 rpy2
从 python 调用了 ars
函数,我需要我的程序知道 ars
是否能够生成样本。也就是说,我希望 ars
抛出一个真正的异常或 return 一些特殊值。
如何捕获错误?
重写代码,使结论部分符合您的要求。这可能是函数最后部分的一种可能变体:
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)