From ligges at statistik.uni-dortmund.de  Wed Oct 27 08:56:46 2004
From: ligges at statistik.uni-dortmund.de (Uwe Ligges)
Date: Wed Oct 27 08:56:37 2004
Subject: [Rd] NextMethod ignoring changed argument
In-Reply-To: <20041027043951.7E9B23982@mprdmxin.myway.com>
References: <20041027043951.7E9B23982@mprdmxin.myway.com>
Message-ID: <417F46AE.4080906@statistik.uni-dortmund.de>

Gabor Grothendieck wrote:

> 
> Is this a bug?  We define the [ operator for class test.
> All it does is force drop to be FALSE and then calls
> the NextMethod.  If we specify drop= in the call then 
> it works as expected (### 2 and ### 3) but if we do not
> specify drop (### 1) then it acts as if drop=TRUE
> even though we have set it to FALSE within [.test .
> 
> 
>>"[.test" <- function(x, i, j, drop = TRUE) { 
> 
> + drop <- FALSE
> + NextMethod("[") 
> + }
> 
>>x <- structure(matrix(1:12, 4, 3), class = "test")
> 
> 
>>x[1,]  ### 1 - why does it ignore drop=FALSE in [.test ????
> 
> [1] 1 5 9
> 
> 
>>x[1,,drop = TRUE]  ### 2 - ok
> 
>      [,1] [,2] [,3]
> [1,]    1    5    9
> 
>>x[1,,drop = FALSE]  ### 3 - ok
> 
>      [,1] [,2] [,3]
> [1,]    1    5    9
> 
>>R.version.string # windows XP
> 
> [1] "R version 2.0.0, 2004-10-04"
> 


Well, the *arguments* of the encolsing function are taken, but not the 
objects defined therein. What you can do is:

"[.test" <- function(x, i, j, drop = TRUE) {
     NextMethod("[", drop = FALSE)
}

Uwe Ligges


[Rd] NextMethod ignoring changed argument
Uwe Ligges