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.

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"
- 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

Reply via email to