Re: [R] Extracting the dimnames of an array with variable dimensions

From: Pierre Roudier <pierre.roudier_at_gmail.com>
Date: Mon, 16 May 2011 20:05:35 +1200

Thanks Bill,

Your solution seems moreover more efficient, in terms of conputing cost.

Cheers,

Pierre

2011/5/16 <Bill.Venables_at_csiro.au>:
> Here is an alternative solution
>
>> foo <- array(data = rnorm(32), dim = c(4,4,2),
> + dimnames=list(letters[1:4], LETTERS[1:4], letters[5:6]))
>>
>> ind <- which(foo > 0, arr.ind = TRUE)
>> row.names(ind) <- NULL  ## to avoid warnings.
>>
>> mapply("[", dimnames(foo), data.frame(ind))
>      [,1] [,2] [,3]
>  [1,] "a"  "A"  "e"
>  [2,] "b"  "A"  "e"
>  [3,] "a"  "B"  "e"
>  [4,] "c"  "B"  "e"
>  [5,] "a"  "C"  "e"
>  [6,] "c"  "C"  "e"
>  [7,] "b"  "D"  "e"
>  [8,] "a"  "A"  "f"
>  [9,] "b"  "B"  "f"
> [10,] "c"  "B"  "f"
> [11,] "d"  "B"  "f"
> [12,] "a"  "C"  "f"
> [13,] "d"  "C"  "f"
> [14,] "a"  "D"  "f"
> [15,] "b"  "D"  "f"
>
> Bill Venables.
>
> -----Original Message-----
> From: r-help-bounces_at_r-project.org [mailto:r-help-bounces_at_r-project.org] On Behalf Of Dennis Murphy
> Sent: Monday, 16 May 2011 3:14 PM
> To: Pierre Roudier
> Cc: r-help_at_r-project.org
> Subject: Re: [R] Extracting the dimnames of an array with variable dimensions
>
> Hi:
>
> Does it have to be an array?  If all you're interested in is the
> dimnames, how about this?
>
> library(plyr)
> foo <- array(data = rnorm(32), dim = c(4,4,2),
>                   dimnames=list(letters[1:4], LETTERS[1:4], letters[5:6]))
>> foo
> , , e
>
>           A          B          C          D
> a -0.2183877 -0.8912908 -2.0175612 -0.8080548
> b  0.4870784 -0.8626293 -0.5641368 -0.5219722
> c  0.8821044  0.3187850  1.2203297 -0.3151186
> d -0.9894656 -1.1779108  0.9853935  0.3560747
>
> , , f
>
>           A          B          C          D
> a  0.7357773 -1.7591637  1.6320887  1.2248529
> b  0.4662315  0.1131432 -0.9790887 -0.6575306
> c -0.3564725 -0.9202688  0.1017894  0.7382683
> d  0.2825117  0.9242299  0.3577063 -1.3297339
>
> # flatten array into a data frame with dimnames as factors
> # adply() converts an array to a data frame, applying a function
> # along the stated dimensions
>  u <- adply(foo, c(1, 2, 3), as.vector)
> subset(u, V1 > 0)[, 1:3]
>   X1 X2 X3
> 2   b  A  e
> 3   c  A  e
> 7   c  B  e
> 11  c  C  e
> 12  d  C  e
> 16  d  D  e
> 17  a  A  f
> 18  b  A  f
> 20  d  A  f
> 22  b  B  f
> 24  d  B  f
> 25  a  C  f
> 27  c  C  f
> 28  d  C  f
> 29  a  D  f
> 31  c  D  f
>
> HTH,
> Dennis
>
> On Sun, May 15, 2011 at 9:20 PM, Pierre Roudier
> <pierre.roudier_at_gmail.com> wrote:
>> Hi list,
>>
>> In a function I am writing, I need to extract the dimension names of
>> an array. I know this can be acheived easily using dimnames() but my
>> problem is that I want my function to be robust when the number of
>> dimensions varies. Consider the following case:
>>
>> foo <- array(data = rnorm(32), dim = c(4,4,2),
>> dimnames=list(letters[1:4], LETTERS[1:4], letters[5:6]))
>>
>> # What I want is to extract the *names of the dimensions* for which
>> foo have positive values:
>> ind <- which(foo > 0, arr.ind = TRUE)
>>
>> # A first solution is:
>> t(apply(ind, 1, function(x) unlist(dimnames(foo[x[1], x[2], x[3],
>> drop=FALSE]))))
>> # But it does require to know the dimensions of foo
>>
>> I would like to do something like:
>>
>> ind <- which(foo > 0, arr.ind = TRUE)
>> t(apply(ind, 1, function(x) unlist(dimnames(foo[x, drop=FALSE]))))
>>
>> but in that case the dimnames are dropped.
>>
>> Any suggestion?
>>
>> Cheers,
>>
>> Pierre
>>
>> --
>> Scientist
>> Landcare Research, New Zealand
>>
>> ______________________________________________
>> R-help_at_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.
>>
>
> ______________________________________________
> R-help_at_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.
>

-- 
Scientist
Landcare Research, New Zealand

______________________________________________
R-help_at_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.
Received on Mon 16 May 2011 - 08:08:17 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 16 May 2011 - 08:40:07 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive