# [Rd] Dimension of apply(X, MARGIN, FUN) when FUN returns a matrix

Gabor Grothendieck ggrothendieck at myway.com
Tue Aug 31 18:55:47 CEST 2004

``` <bhs2 <at> mevik.net> writes:

:
: Dear all,
:
: apply(X, MARGIN, FUN, ...) returns an array of dimension
: c(n, dim(X)[MARGIN]) when FUN returns a vector of length n > 1.
:
: Matrices and arrays are also vectors, so if FUN returns a matrix or an
: array, apply returns an array of dimension c(n, dim(X)[MARGIN]) as
: above.  This is in accordance with the description of apply in the
: Blue Book, and also how Splus works (at least v6.0).
:
: I am curious: why was it decided not to return an array of dimension
: c(dim(result.of.FUN), dim(X)[MARGIN]) when FUN returns a matrix or an
: array?
:
: (This is not meant as criticism.  I am sure there is a good reason; I
: just cannot see it.)
:

This does not answer your question but note that you can return the
result as a list.  In the following apply is used to turn each column
of x into a 2x3 matrix returning the list of four such matrices:

R> x <- matrix(1:24,6)
R> apply(x, 2, function(x)list(matrix(x,2)))
[]
[][]
[,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

[]
[][]
[,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

[]
[][]
[,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18

[]
[][]
[,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

```