Muon
Muon

Reputation: 1346

R: merge two equal sized arrays

I'm sure this question must be trivial but I couldn't find a similar question on stack overflow. I wish to merge array.A and array.B so that the result is an array of arrays of the values of arrays A and B.

For example:

array.A <- array(1:9, dim=c(3,3))
array.B <- array(LETTERS[seq( from = 1, to = 9 )], dim=c(3,3))

> array.A
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

> array.B
     [,1] [,2] [,3]
[1,] "A"  "D"  "G" 
[2,] "B"  "E"  "H" 
[3,] "C"  "F"  "I" 

And I wish to merge them so that the resulting array would look like this:

> result
     [,1]     [,2]     [,3]
[1,] ["A",1]  ["D",4]  ["G",7] 
[2,] ["B",2]  ["E",5]  ["H",8]
[3,] ["C",3]  ["F",6]  ["I",9]

I've tried using cbind and rbind but this isn't what I'm looking for (I'm not trying to concatenate the arrays). I can't seem to find a simple solution.

Thanks in advance.

Upvotes: 1

Views: 259

Answers (1)

thelatemail
thelatemail

Reputation: 93833

It's not a typical kind of structure, but you can put list objects inside a matrix or array:

out <- array(Map(list, array.A, array.B), dim=dim(array.A) )
#     [,1]   [,2]   [,3]  
#[1,] List,2 List,2 List,2
#[2,] List,2 List,2 List,2
#[3,] List,2 List,2 List,2

out[1,1]
#[[1]]
#[[1]][[1]]
#[1] 1
#
#[[1]][[2]]
#[1] "A"

out[1,1][[1]][1]
#[[1]]
#[1] 1

out[1,1][[1]][2]
#[[1]]
#[1] "A"

Upvotes: 2

Related Questions