[R] Generalising to n-dimensions
Robin Hankin
rksh1 at cam.ac.uk
Fri Sep 26 11:26:30 CEST 2008
Laura Bonnett wrote:
> Sorry to hassle you, but I really need to get my code up and running.
> Please can you therefore explain what a and v are?
Hi Laura. I've been away (in Norwich). Sorry not to give an example.
Variable 'a' is an array and variable 'd' is the same as in your
original email.
> a <- array(1:4,c(3,2,2,4))
> d <- c(1,2)
> f(a,d)
[,1] [,2]
[1,] 1 4
[2,] 2 1
[3,] 3 2
>
Thus in this case f(a,d) gives a[,,1,2]. Function f() is necessary because
you specified that the length of 'd' is not known in advance.
You can get 'd' from a single row of expand.grid() [but you will have to
coerce it to a matrix]
HTH
rksh
>
> Thank you,
>
> Laura
>
> On Wed, Sep 24, 2008 at 8:27 PM, Laura Bonnett
> <l.j.bonnett at googlemail.com <mailto:l.j.bonnett at googlemail.com>> wrote:
>
> Can I ask what a and v are?
>
> Thanks,
>
> Laura
>
>
> On Sat, Aug 23, 2008 at 11:41 AM, Robin Hankin <rksh1 at cam.ac.uk
> <mailto:rksh1 at cam.ac.uk>> wrote:
>
> Laura Bonnett wrote:
>
> crosstable[,,expand[d,1],expand[d,2],expand[d,3],...expand[d,n]]
> crosstable is just a crosstabulation of an
> n+2-dimensional dataset and I am trying to pick out those
> that are in combination 'd' of expand. So for example, for
> 5-dimensional data using your example:
> Var1 Var2 Var3
> 1 1 1 1
> 2 2 1 1
> 3 3 1 1
> 4 1 2 1
> 5 2 2 1
> 6 3 2 1
> 7 1 1 2
> 8 2 1 2
> 9 3 1 2
> 10 1 2 2
> 11 2 2 2
> 12 3 2 2
> d refers to the row of the matrix above - d=2 is 2,1,1 so
> crosstable[,,2,1,1] would retrieve all the data where Var1
> =2, Var2=1, Var3=1 and the two remaining variables are
> given in the crosstabulations for all values.
> Is that any better?
>
>
> OK I think I understand. The magic package uses this type of
> construction extensively, but not this particular one.
>
> It's trickier than I'd have expected.
>
> Try this:
>
> f <- function(a,v){
> jj <-
> sapply(dim(a)[seq_len(length(dim(a))-length(v))],seq_len,simplify=FALSE)
> jj <- c(jj , as.list(v))
> do.call("[" , c(list(a) , jj, drop=TRUE))
> }
>
>
>
> [you will have to coerce the output from expand.grid() to a
> matrix in order to extract a row from it]
>
>
> HTH
>
> rksh
>
>
>
>
>
>
>
>
> --
> Robin K. S. Hankin
> Senior Research Associate
> Cambridge Centre for Climate Change Mitigation Research (4CMR)
> Department of Land Economy
> University of Cambridge
> rksh1 at cam.ac.uk <mailto:rksh1 at cam.ac.uk>
> 01223-764877
>
>
>
--
Robin K. S. Hankin
Senior Research Associate
Cambridge Centre for Climate Change Mitigation Research (4CMR)
Department of Land Economy
University of Cambridge
rksh1 at cam.ac.uk
01223-764877
More information about the R-help
mailing list