On Thu, 2005-02-17 at 12:32, Prof Brian Ripley wrote:
and you are talking about *names of* dimnames).
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
<imosqueira@suk.azti.es>
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:
[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:
[1] "i: missing"
[1] "j: missing"
[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))
2 3
4 7
Although dimnames seem to be in fact simply ignored:
[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.