[R] Unexpected behavior of "apply" when FUN=sample
Gabor Grothendieck
ggrothendieck at gmail.com
Tue May 14 12:28:03 CEST 2013
On Tue, May 14, 2013 at 4:52 AM, Luca Nanetti <luca.nanetti at gmail.com> wrote:
> Dear experts,
>
> I wanted to signal a peculiar, unexpected behaviour of 'apply'. It is not a
> bug, it is per spec, but it is so counterintuitive that I thought it could
> be interesting.
>
> I have an array, let's say "test", dim=c(7,5).
>
>> test <- array(1:35, dim=c(7, 5))
>> test
>
> [,1] [,2] [,3] [,4] [,5]
> [1,] 1 8 15 22 29
> [2,] 2 9 16 23 30
> [3,] 3 10 17 24 31
> [4,] 4 11 18 25 32
> [5,] 5 12 19 26 33
> [6,] 6 13 20 27 34
> [7,] 7 14 21 28 35
>
> I want a new array where the content of the rows (columns) are permuted,
> differently per row (per column)
>
> Let's start with the columns, i.e. the second MARGIN of the array:
>> test.m2 <- apply(test, 2, sample)
>> test.m2
>
> [,1] [,2] [,3] [,4] [,5]
> [1,] 1 10 18 23 32
> [2,] 7 9 16 25 30
> [3,] 6 14 17 22 33
> [4,] 4 11 15 24 34
> [5,] 2 12 21 28 31
> [6,] 5 8 20 26 29
> [7,] 3 13 19 27 35
>
> perfect. That was exactly what I wanted: the content of each column is
> shuffled, and differently for each column.
> However, if I use the same with the rows (MARGIIN = 1), the output is
> transposed!
>
>> test.m1 <- apply(test, 1, sample)
>> test.m1
>
> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
> [1,] 1 2 3 4 5 13 21
> [2,] 22 30 17 18 19 20 35
> [3,] 15 23 24 32 26 27 14
> [4,] 29 16 31 25 33 34 28
> [5,] 8 9 10 11 12 6 7
>
> In other words, I wanted to permute the content of the rows of "test", and
> I expected to see in the output, well, the shuffled rows as rows, not as
> column!
>
> I would respectfully suggest to make this behavior more explicit in the
> documentation.
aaply in the plyr package works in the way you expected.
--
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com
More information about the R-help
mailing list