對使用S4方法在簡易R功能的優點是,該方法是強烈鍵入。
- 簽名是一種警衛,方法不會暴露給不符合其簽名要求的類型 。否則會 拋出異常。
- 通常情況下,您想區分方法行爲 ,具體取決於傳遞的參數類型。強大的打字功能使其非常簡單易用。
- 強類型是多個人類可讀的(即使R中這種說法,可以討論,該S4語法不是很直觀專門對於一個初學者)
這裏和示例,其中,I定義一個簡單的函數,那麼我
show.vector(mtcars,'cyl') ## works
show.vector(mtcars,1:10) ## DANGER!!works but not the desired behavior
show.vector(mtcars,-1) ## DANGER!!works but not the desired behavior
比較方法調用:如果你測試這一種方法包裝它現在
show.vector <- function(.object,name,...).object[,name]
## you should first define a generic to define
setGeneric("returnVector", function(.object,name,...)
standardGeneric("returnVector")
)
## the method here is just calling the showvector function.
## Note that the function argument types are explicitly defined.
setMethod("returnVector", signature(.object="data.frame", name="character"),
def = function(.object, name, ...) show.vector(.object,name,...),
valueClass = "data.frame"
)
returnVector(mtcars,'cyl') ## works
returnVector(mtcars,1:10) ## SAFER throw an excpetion
returnVector(mtcars,-1) ## SAFER throw an excpetion
因此,如果你會暴露你的方法給他人,這是更好地封裝它們的方法。
謝謝,這有助於我理解爲什麼包含BondCashFlows的類不再有效。我沒有將函數設置爲通用。我想我也需要這樣做。我有一個類,然後我設置了一個通用函數,然後是方法。唷,我迷失在這一切中。但是,這是有益的感謝 –