我提出一個短碼來創建S4類myclass
,並確保如果他們驗證由一個參數給定的條件param
S4類構造函數和驗證
setClass("myclass", slot = c(x = "numeric"))
#constructor
ValidmyClass<- function(object, param = 1)
{
if([email protected] == param) return(TRUE)
else return("problem")
}
setValidity("myclass", ValidmyClass)
setMethod("initialize","myclass", function(.Object,...){
.Object <- callNextMethod()
validObject(.Object,...)
.Object
})
對於我得到以下錯誤消息對象被創建Error in substituteFunctionArgs(validity, "object", functionName = sprintf("validity method for class '%s'", : trying to change the argument list of for validity method for class 'myclass' with 2 arguments to have arguments (object)
我明白這個問題,但我找不到解決這個問題的方法。有關setValidity
的文檔提到參數方法應該是「有效性方法;即NULL
或一個參數(對象)的函數」。因此從我的理解中排除了不止一個論點。
不過,這個例子背後的想法是,我希望能夠根據外部給定參數的值測試myclass
對象的構造。如果要添加更多條件,我希望有足夠的靈活性,因此只需要更新功能ValidmyClass
,而無需添加更多插槽。