Christoph Buser
2008-Jan-31 12:54 UTC
[Rd] S4: setGeneric() and setMethod() with changed argument order
Dear R devel team Using S4 classes in R I found a possible source of mistakes caused by an inattentive user. If one uses another order of the arguments for a function in the setGeneric() as in the setMethod() call, one can get undesired side effects without any warning. Would it be desirable to include a warning for such cases? Thank you for a statement. R code: ## set generic function "test1" with 3 arguments setGeneric("test1", function(object, printit = TRUE, name = "tmp") standardGeneric("test1")) ## Set method for test1 and class "numeric", but change the order od the 2nd ## and 3rd arguments -> No warning, everything works well? setMethod("test1", signature(object = "numeric"), function(object, name = "tmp", printit = TRUE) { match.call() }) ## .local is generated with the order from setGeneric(), but is called ## afterwards with the wrong order from setMethod() which can cause an error ## (if you are lucky) or strange results. selectMethod("test1", signature = signature(object = "numeric"))> Method Definition: > > function (object, printit = TRUE, name = "tmp") > { > .local <- function (object, name = "tmp", printit = TRUE) > { > match.call() > } > .local(object, printit, name) > } > > Signatures: > object > target "numeric" > defined "numeric" >## Shows that for the argument "name" printit is used. For the argument ## "printit" name is used test1(pi)> .local(object = object, name = printit, printit = name)Best regards, Christoph Buser -------------------------------------------------------------- Christoph Buser <buser at stat.math.ethz.ch> Seminar fuer Statistik, LEO C13 ETH Zurich 8092 Zurich SWITZERLAND phone: x-41-44-632-4673 fax: 632-1228 http://stat.ethz.ch/~buser/