我是新手。我正在尝试使用S4课程。在我的一些设置方法中,我想要输入一个值并测试它是否有效。如果它是有效的,我想分配它。如果它无效,我想生成一个可以测试的警告。下面是一个简单的例子:S4类错误处理
> thisFoo<-new("foo", ind = 2)
> thisFoo
An object of class "foo"
Slot "ind":
[1] 2
> setInd(thisFoo)<-"A"
Warning message:
In `setInd<-`(`*tmp*`, value = "A") : Foobar
> thisFoo
An object of class "foo"
Slot "ind":
[1] 2
但是我想能够测试该分配失败:
setClass("foo", representation(ind = "numeric"))
setGeneric(name="setInd<-",def=function(object,value){standardGeneric("setInd<-")})
setReplaceMethod(f="setInd",signature="foo",
def=function(object,value){
if(is.numeric(value)){
[email protected]<-value;}
else{
warning("Foobar")
}
return(object)}
)
当我尝试指定的字符,该生成一条警告消息。这样做的好方法是什么?谢谢。
在这种情况下,分配违反了类定义并且无论如何都会产生错误;测试是没有必要的。或者,使用'c(“foo”,“numeric”)作为替换方法的签名,并且再次尝试赋值会产生一个错误(因为没有方法匹配'c(“foo”,“character”) ')。正如约里斯提到的那样,用tryCatch抓住错误。 – 2011-03-24 02:41:27