On Dec 21, 2011, at 10:34 PM, David A Vavra wrote:

I want to take slices of a multi-dimensional table (or array) without
knowing the number of dimensions in advance.

As a test I tried using (in this example a 3d table):

    do.call(`[`, list(tbl, x,NULL,NULL)]

Surely that was meant to be:

do.call(`[`, list(tbl, x,NULL,NULL) )

(This does imply you knew the number of dimensions was 3.)


where I built the list on the fly. It works great as long as I only want the
first dimension however when I try a different dimension, say with
list(tbl,NULL,x,NULL), I get "<0 x 0> matrix" as the result. I thought this was because I wasn't calling the right function but there is no `[.table` or
`[.matrix` or even `[.array`.

It is interesting to look at what that returns.

tbl <- array(1:27, c(3,3,3))
x=1

str( do.call(`[`, list(tbl, x,NULL,NULL) ) )
 int[1, 0 , 0 ]

It looks as though the Nulls became 0's. So if you wanted to use do.call(`[` then this succeeds:

> do.call(`[`, list(tbl, x, 1:dim(tbl)[2], 1:dim(tbl)[3]) )
     [,1] [,2] [,3]
[1,]    1   10   19
[2,]    4   13   22
[3,]    7   16   25

As does this using the "empty comma" approach:

 eval(parse(text= paste("tbl[ " ,x, " , , ]"))  )
     [,1] [,2] [,3]
[1,]    1   10   19
[2,]    4   13   22
[3,]    7   16   25

(Which after looking at the `r.utils::extract` code suggested by Bengtsson, was what he did .... after considerably better sanity checking than above.)


Am I going about this the wrong way?

DAV

        [[alternative HTML version deleted]]

--

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to