Rのarrayで作成した配列を配列のインデックスとともにデータフレームで出力したい。


Rのarrayで作成した配列をデータフレームに出力する方法をご教示ください。

具体的には、n次元配列があったとして、以下のとおり出力させたいと考えています。  
1列目には、1次元目のインデックス番号、  
2列目には、2次元目のインデックス番号、  
・  
・  
・  
n列目には、n次元目のインデックス番号、  
n+1列目には、配列の要素

これまでは、配列の次元の数だけforループで行っていましたが、行わないで出力できる  
便利な手段などはありますでしょうか。




たとえば、このような配列があったとして、

[code]

    > a <- array(1:30, c(3, 5, 2))  # サイズが 3 x 5 x 2 の3次元配列
    > a
    , , 1
    
         [,1] [,2] [,3] [,4] [,5]
    [1,]    1    4    7   10   13
    [2,]    2    5    8   11   14
    [3,]    3    6    9   12   15
    
    , , 2
    
         [,1] [,2] [,3] [,4] [,5]
    [1,]   16   19   22   25   28
    [2,]   17   20   23   26   29
    [3,]   18   21   24   27   30
    
[/code]

`expand.grid()`関数を使えば、インデックスのデータフレームを作成することができます。

[code]

    > indexes <- expand.grid(1:3, 1:5, 1:2)
    > result <- cbind(indexes, as.vector(a))
    > head(result)
      Var1 Var2 Var3 as.vector(a)
    1    1    1    1            1
    2    2    1    1            2
    3    3    1    1            3
    4    1    2    1            4
    5    2    2    1            5
    6    3    2    1            6
    
[/code]

この考え方をベースに、どのようなサイズのN次元配列にも適用できるように拡張すると、こんな感じになると思います。

[code]

    > cbind(do.call(expand.grid, lapply(dim(a), seq_len)), as.vector(a))
    
[/code]

あるいは

[code]

    > library(dplyr)
    > lapply(dim(a), seq_len) %>% do.call(expand.grid, .) %>% cbind(as.vector(a))
    
[/code]

