Should now be fixed in r-devel and 2.4 patched.

Iago Mosqueira wrote:
> 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
>
>   

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to