[R] List to Array: How to establish the dimension of the array

Brian Diggs diggsb at ohsu.edu
Wed Jan 25 00:34:26 CET 2012


On 1/24/2012 2:47 PM, Ajay Askoolum wrote:
> Given a variable aa in the workspace, some of its attributes are:
>
>> typeof(aa)
> [1] "list"
>> mode(aa)
> [1] "list"
>> length(aa)
> [1] 2
>
> How do I retrieve the maximum indices, in this case 2,3,4? The variable itself is:
>
>> aa
> [[1]]
> [[1]][[1]]
> [[1]][[1]][[1]]
> [1] 37531.52
>
> [[1]][[1]][[2]]
> [1] 62787.32
>
> [[1]][[1]][[3]]
> [1] 5503.184
>
> [[1]][[1]][[4]]
> [1] 33832.8
>
>
> [[1]][[2]]
> [[1]][[2]][[1]]
> [1] 20469.6
>
> [[1]][[2]][[2]]
> [1] 27057.27
>
> [[1]][[2]][[3]]
> [1] 51160.25
>
> [[1]][[2]][[4]]
> [1] 45165.24
>
>
> [[1]][[3]]
> [[1]][[3]][[1]]
> [1] 957.932
>
> [[1]][[3]][[2]]
> [1] 21902.94
>
> [[1]][[3]][[3]]
> [1] 37531.52
>
> [[1]][[3]][[4]]
> [1] 62787.32
>
>
>
> [[2]]
> [[2]][[1]]
> [[2]][[1]][[1]]
> [1] 5503.184
>
> [[2]][[1]][[2]]
> [1] 33832.8
>
> [[2]][[1]][[3]]
> [1] 20469.6
>
> [[2]][[1]][[4]]
> [1] 27057.27
>
>
> [[2]][[2]]
> [[2]][[2]][[1]]
> [1] 51160.25
>
> [[2]][[2]][[2]]
> [1] 45165.24
>
> [[2]][[2]][[3]]
> [1] 957.932
>
> [[2]][[2]][[4]]
> [1] 21902.94
>
>
> [[2]][[3]]
> [[2]][[3]][[1]]
> [1] 37531.52
>
> [[2]][[3]][[2]]
> [1] 62787.32
>
> [[2]][[3]][[3]]
> [1] 5503.184
>
> [[2]][[3]][[4]]
> [1] 33832.8
> 	[[alternative HTML version deleted]]
>

Better to give the dput version of aa, so that it can be recreated easily

aa <- list(list(list(37531.52, 62787.32, 5503.184, 33832.8),
                 list(20469.60, 27057.27, 51160.25, 45165.24),
                 list(957.932,  21902.94, 37531.52, 62787.32)),
            list(list(5503.184, 33832.8,  20469.6,  27057.27),
                 list(51160.25, 45165.24, 957.932,  21902.94),
                 list(37531.52, 62787.32, 5503.184, 33832.8)))


Given that, the three "dimensions" can be gotten with

length(aa)
max(sapply(aa, length))
max(sapply(aa, sapply, length))

which give

 > length(aa)
[1] 2
 > max(sapply(aa, length))
[1] 3
 > max(sapply(aa, sapply, length))
[1] 4

If you want to turn this into an actual array (assuming it is regular), 
  you can do that fairly easily with the plyr package
(I imagine you can do it with base functions too, but in a quick attempt 
was not able to do so).

library("plyr")
aaa <- laply(aa, laply, laply, identity)

Then all the dimensions can be gotten at once

 > dim(aaa)
[1] 2 3 4

-- 
Brian S. Diggs, PhD
Senior Research Associate, Department of Surgery
Oregon Health & Science University



More information about the R-help mailing list