Hi Kruno -- Krunoslav Sever wrote: > Hello all! > > I am not sure if this is known or even intended, but please consider the > following simple example code: > > # set up a simple S4 class with single slot > setClass("b", representation = representation(x = "numeric")) > > # provide initialize method > setMethod("initialize", > signature(.Object = "b"), > function(.Object,...) b.initialize(.Object,...) > ) > > # actual implementation of initialize method external > b.initialize <- function(kl, x = numeric(),...) { > k...@x <- x > kl > } > > # this gives an error in R-2.9.2 > test <- new("b", x = 1:2, k = 3, y = 2) > > What apparently happens is that the k=3 part in ... for b.initialize is > assigned to kl while the initial "b" object that should be assigned to > kl ends up in "..." of b.initialize.
This is R argument matching at work > f <- function(.Object, ...) g(.Object, ...) > g <- function(kl, x, ...) match.call() > f(1, x=2, k=3) g(kl = 3, x = 2, .Object) specifically partial matching of named arguments taking precedence of positional matching of unnamed arguments. > I assume this is due to the naming similarity of k and kl, probably > confusing the matching algorithm: if another first argument for > b.initialize is used (not starting with k), everything is fine. > > Other workarounds: > - in setMethod write "kl = .Object" instead of simply ".Object" yes, this avoids mixing matching by name and by position. Martin Morgan > - this does not happen if the contents of b.initialize are directly > moved to the setMethod call, even if k is renamed to, say, .O > This happened to me in a case where b is a subclass of another class > which has a slot named k, so the "offending" k = 3 is not artificial here. > > I hope some dev here can look into the switching effect: this cannot > possibly be intended? > > Here my sessioninfo(): >> sessionInfo() > R version 2.9.2 (2009-08-24) > i686-pc-linux-gnu > > locale: > LC_CTYPE=de_DE.UTF-8;LC_NUMERIC=C;LC_TIME=de_DE.UTF-8;LC_COLLATE=de_DE.UTF-8;LC_MONETARY=C;LC_MESSAGES=de_DE.UTF-8;LC_PAPER=de_DE.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=de_DE.UTF-8;LC_IDENTIFICATION=C > > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > Best > Kruno > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel