我有一個函數myFunction我需要創建一個同名的S4方法(不要問我爲什麼)。
我想保留myFunction的舊功能。定義一個S4方法,如果已經有一個同名的函數
有沒有辦法保持我的舊功能?
我寧願沒有設置一個通用的這個舊的函數作爲簽名可能會非常不同......
我有一個函數myFunction我需要創建一個同名的S4方法(不要問我爲什麼)。
我想保留myFunction的舊功能。定義一個S4方法,如果已經有一個同名的函數
有沒有辦法保持我的舊功能?
我寧願沒有設置一個通用的這個舊的函數作爲簽名可能會非常不同......
是的,有保持你的舊功能的一種方式。除非你希望S3和S4的函數都能接受相同類的相同數量的參數,否則它並不複雜。
# Create an S3 function named "myFun"
myFun <- function(x) cat(x, "\n")
# Create an S4 function named "myFun", dispatched when myFun() is called with
# a single numeric argument
setMethod("myFun", signature=signature(x="numeric"), function(x) rnorm(x))
# When called with a numeric argument, the S4 function is dispatched
myFun(6)
# [1] 0.3502462 -1.3327865 -0.9338347 -0.7718385 0.7593676 0.3961752
# When called with any other class of argument, the S3 function is dispatched
myFun("hello")
# hello
如果做希望S4功能採取相同類型的參數作爲S3的功能,你需要做一些像下面,設置類的說法,使R有一些占卜的方式,使用哪種你正打算兩個功能:
setMethod("myFun", signature=signature(x="greeting"),
function(x) cat(x, x, x, "\n"))
# Create an object of class "greeting" that will dispatch the just-created
# S4 function
XX <- "hello"
class(XX) <- "greeting"
myFun(XX)
# hello hello hello
# A supplied argument of class "character" still dispatches the S3 function
myFun("hello")
# hello
如果舊的myFun沒有參數,會發生什麼情況? – RockScience 2011-12-27 10:19:49
你的意思是沒有正式的參數(例如'search()'),或者沒有默認參數?在任何情況下,它都不應該產生重大影響。 (不過,我會稍微編輯我的答案,以刪除我給S3函數的無關缺省參數。) – 2011-12-27 10:22:38
是的我的意思是沒有正式的參數。它確實有所作爲,因爲在設置新方法時,R使用舊的myFun作爲此方法的泛型。並且我收到一條錯誤消息,指出使用此功能無法完成調度。 從我現在瞭解的情況來看,這樣的函數可能不是一個通用的候選對象,我不確定使用具有這個名稱的方法不是一個好習慣。我認爲這是一個衝突的情況。你有什麼想法通常解決這個問題? – RockScience 2011-12-28 03:51:37
基本上我想知道這是否是**衝突的情況下**(我已經刪除了兩個中的一個來解決) ,或者如果S4系統被設計來處理這個問題。我不想欺騙這個系統。 – RockScience 2011-12-27 03:50:20