El mié, 04-10-2006 a las 09:52 -0400, John Chambers escribió: > I think the problem in your case comes from the mechanism used to handle > non-standard argument lists; notice that you have added 3 new > arguments.
Yes, our object is always 5 dimensional. We could use (...) but it looked overly complex. > If you look at the body of the resulting method you will see > that the mechanism used to handle this (defining a function .local) > fails to copy the default value from the method, as in the simpler > example below: > > > setMethod("[", c("mm"), function(x, i, j, k..., drop=FALSE)browser()) > [1] "[" > > selectMethod("[", "mm") > Method Definition: > > function (x, i, j, ..., drop = TRUE) > { > .local <- function (x, i, j, k..., drop = FALSE) > browser() > .local(x, i, j, ..., drop = drop) > } > > > We can probably fix this. Meanwhile, the workaround is to use the same > mechanism yourself, but get the default value right. Define your > method as a function (like the .local you see when printing the current > method) and then define a method with the formally correct arguments > (function(x, i, j, ..., drop=FALSE)) and call your function from that > method. OK, many thanks. > Beware there is _another_ related "bug": if you use callNextMethod(), > it does not seem to copy the default value of drop= either. (It's a bit > more debatable what callNextMethod() with no arguments should do in this > case, so the problem here may be an "undesired feature" rather than a > bug.) You didn't show your real method, so this may not apply in your > example. I am adding the whole method below, but I do not thing this applies as it is currently written. > By the way, I would be a little surprised if this had anything to do > with changes in 2.4.0, at least those I'm aware of. This maybe the case, but it was working fine in 2.3.1. Cheers, Iago setMethod("[", signature(x="FLQuant"), function(x, i="missing", j="missing", k="missing", l="missing", m="missing", ..., drop=FALSE) { if (missing(i)) #i <- dimnames([EMAIL PROTECTED])[1][[1]] i <- seq(1, length(dimnames([EMAIL PROTECTED])[1][[1]])) if (missing(j)) j <- dimnames([EMAIL PROTECTED])[2][[1]] if (missing(k)) k <- dimnames([EMAIL PROTECTED])[3][[1]] if (missing(l)) l <- dimnames([EMAIL PROTECTED])[4][[1]] if (missing(m)) m <- dimnames([EMAIL PROTECTED])[5][[1]] if (!drop) { flq <- FLQuant([EMAIL PROTECTED], j, k, l, m, drop=FALSE]) units(flq) <- units(x) quant(flq) <- quant(x) } else if(drop) flq <- [EMAIL PROTECTED], j, k, l, m, ..., drop=TRUE] return(flq) } ) > Iago Mosqueira wrote: > > Dear all, > > > > After installing R 2.4.0, a definition of "[" for an S4 class has > > stopped working as the default for drop in the generic, TRUE, appears to > > override the default in the method > > > > The method is defined for demonstration purposes as > > > > setMethod("[", signature(x="FLQuant"), > > function(x, i="missing", j="missing", k="missing", l="missing", > > m="missing", ..., drop=FALSE) { > > > > print(drop) > > } > > ) > > > > When called as > > > > new('FLQuant')[1,] > > > > drop is TRUE, instead of FALSE. Am I missing something? Has there been a > > change in R 2.4.0 of relevance here? I could not find it in the NEWS > > file. > > > > Many thanks, > > > > > > Iago Mosqueira > > > > ______________________________________________ > > 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