On Thu, 2005-02-17 at 12:32, Prof Brian Ripley wrote: > and you are talking about *names of* dimnames).
Sorry for the confusion. > It `works' for arrays because the definition there (in ?Extract) is not > the same as the generic you are using: notice the ... in the definitions, > and for arrays it is really "["(x, ..., drop=TRUE) and the names of ... > are ignored. Thanks. I did realise for arrays the names are ignored, but in the new class they are not even accepted. > so argument names are ignored for the primitives, but not for S3 methods > (and I believe not for S4 methods). I am afraid I fail to see then why my example code fails to accept names when subsetting. Shouldn't a class that extends "array" inherit this behaviour too? Many thanks, Iago > > > > From: > > Iago Mosqueira > > <[EMAIL PROTECTED]> > > To: > > r-help@stat.math.ethz.ch > > Subject: > > Subsetting using dimnames on S4 > > array-based class > > Date: > > Fri, 11 Feb 2005 08:29:03 +0000 > > > > Hello, > > > > I am encountering some problems when overloading the "[" operator for a > > new S4 class based on array. This is an example class definition: > > > > setClass("foo", > > representation("array"), > > prototype(array(NA, dim=c(3,3)), > > dimnames=list(age=1:3, year=10:12)) > > ) > > > > And this the corresponding setMethod with print estatements to see what > > is being passed: > > > > setMethod("[", signature(x="foo"), > > function(x, i="missing", j="missing", ..., drop="missing") { > > print(paste("i:", i)) > > print(paste("j:", j)) > > } > > ) > > > > > > So I first create a new object and load it with some data: > > > >> x <- new("foo") > >> x[,] <- 1:9 > > > > And then apply subsetting without using the dimension names and see what > > are the values of i and j inside the function: > > > >> x[1:2,'10'] > > [1] "i: 1" "i: 2" > > [1] "j: 10" > > > > > > Both i and j hold exactly what was expected here. But if I use the > > dimension names, the subsetting indices does not seem to be passed as I > > expected: > > > >> x[age=1:3, year=1:3] > > [1] "i: missing" > > [1] "j: missing" > >> x[, year='10'] > > [1] "i: missing" > > [1] "j: missing" > > > > Subsetting with dimnames appears to work without trouble on an array, > > which "foo" extends: > > > > s<-array(1:9,dim=c(3,3),dimnames=list(age=1:3,year=1:3)) > >> s[1,2:3] > > 2 3 > > 4 7 > >> s[age=1,year=2:3] > > 2 3 > > 4 7 > > > > Although dimnames seem to be in fact simply ignored: > > > >> s[a=1,b=3] > > [1] 7 > > > > > > System: > > Linux Debian 3.0 > > R 2.0.0 > > > > Do I need to define my class differently for subsetting using dimnames > > to work? Even if they are not really being checked, I would like to be > > able to use subsetting in this way as it makes code more readable when > > using arrays with many dimensions. ______________________________________________ R-devel@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-devel