「3重forループをRで書くと遅いからなー。outer関数の多変数版ないかなー」とか思ってouterをなんとなくネストさせてみたら動いたwwwしかも、outerだから結構早いwww
> outer(outer(1:5,1:5,"+"),1:5,"+") , , 1 [,1] [,2] [,3] [,4] [,5] [1,] 3 4 5 6 7 [2,] 4 5 6 7 8 [3,] 5 6 7 8 9 [4,] 6 7 8 9 10 [5,] 7 8 9 10 11 , , 2 [,1] [,2] [,3] [,4] [,5] [1,] 4 5 6 7 8 [2,] 5 6 7 8 9 [3,] 6 7 8 9 10 [4,] 7 8 9 10 11 [5,] 8 9 10 11 12 , , 3 [,1] [,2] [,3] [,4] [,5] [1,] 5 6 7 8 9 [2,] 6 7 8 9 10 [3,] 7 8 9 10 11 [4,] 8 9 10 11 12 [5,] 9 10 11 12 13 , , 4 [,1] [,2] [,3] [,4] [,5] [1,] 6 7 8 9 10 [2,] 7 8 9 10 11 [3,] 8 9 10 11 12 [4,] 9 10 11 12 13 [5,] 10 11 12 13 14 , , 5 [,1] [,2] [,3] [,4] [,5] [1,] 7 8 9 10 11 [2,] 8 9 10 11 12 [3,] 9 10 11 12 13 [4,] 10 11 12 13 14 [5,] 11 12 13 14 15
なんでこういうことができるのか分かった。outerは配列(ベクトルでもリストでもないことに注意)を受け取って配列を返す関数と考えれば別に不思議はないか。