On Tue, May 14, 2013 at 4:52 AM, Luca Nanetti <luca.nane...@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 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.