From mtmorgan at fhcrc.org  Fri Jan 26 18:50:31 2007
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Fri, 26 Jan 2007 09:50:31 -0800
Subject: [Rd] "[" operator and indexing ambiguity
In-Reply-To: <43ec92880701260755o7cd9cc8el32c6418066233be2@mail.gmail.com>
	(Bradley Buchsbaum's message of "Fri, 26 Jan 2007 10:55:59 -0500")
References: <43ec92880701260755o7cd9cc8el32c6418066233be2@mail.gmail.com>
Message-ID: <6phveitpti0.fsf@gopher4.fhcrc.org>

Hackish (and maybe expensive; does match.call duplicate the call
arguments?), but maybe

setClass("A", "numeric")

setMethod("[",
          c(x="A"),
          function(x, i, j, ..., drop=TRUE) {
              "..." %in% names(match.call(expand.dots=FALSE))
          })

> a <- new("A")
> a[i]
[1] FALSE
> a[i,,]
[1] TRUE

? 

Martin

"Bradley Buchsbaum" <bbuchsbaum at berkeley.edu> writes:

> Hi,
>
> I am working on writing some S4 classes that represent
> multidimensional (brain) image data.  I would like these classes to
> support standard array indexing. I have been studying the Matrix and
> EBImage (http://www.bioconductor.org/packages/1.9/bioc/html/EBImage.html)
> packages to see how this is done.
>
> When using objects of the "array" class directly, R distinguishes
> between the calls:
>
> x[i,,] and x[i]
>
> with the former returning a 2D array of values and the latter
> returning a single value.  The question I have is whether this same
> behavior can be simulated in classes that do not inherit from the
> "array" class directly? (See below for a snippet from the EBImage
> package which suggests that it cannot).
>
> My guess is that native array indexing is making use of the
> information provided by the commas, and this is unavailable to user
> implemented class methods?
>
> thanks,
>
> Brad Buchsbaum
>
>
>
> # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> setMethod("[", signature(x = "Image", i = "numeric", j = "missing"),
>     function(x, i, j, k, ..., drop) {
>         if (missing(k)) {
>             warning("using index [int], cannot distinguish from
> [int,,ANY], use [int,1:dim(x)[2],ANY] otherwise")
>             tmp = x at .Data[i, drop = FALSE]
>         }
>         else {
>             tmp = x at .Data[i, , k, drop = FALSE]
>         }
>         ...
> }
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Martin Morgan
Bioconductor / Computational Biology
http://bioconductor.org



[Rd] "[" operator and indexing ambiguity
Martin Morgan