t(apply(test,1,sample)) will also do.
As the OP noted, the results are simply transposed. So if an operation is
to be applied to rows, yielding modified rows, simply transpose the results.

Cheers,

Tsjerk


On Tue, May 14, 2013 at 12:07 PM, Ted Harding <Ted.Harding@wlandres.net>wrote:

> On 14-May-2013 09:46:32 Duncan Murdoch wrote:
> > On 13-05-14 4:52 AM, Luca Nanetti 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.
> >
> > It's is already very explicit:  "If each call to FUN returns a vector of
> > length n, then apply returns an array of dimension c(n, dim(X)[MARGIN])
> > if n > 1."  In your first case, sample is applied to columns, and
> > returns length 7 results, so the shape of the final result is c(7, 5).
> > In the second case it is applied to rows, and returns length 5 results,
> > so the shape is c(5, 7).
> >
> > Duncan Murdoch
>
> And the (quite simple) practical implication of what Duncan points out is:
>
>   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
>
> # To permute the rows:
>   t(apply(t(test), 2, sample))
>   #      [,1] [,2] [,3] [,4] [,5]
>   # [1,]   22   29    8   15    1
>   # [2,]   30   16   23    2    9
>   # [3,]   10   31   24    3   17
>   # [4,]   11    4   25   32   18
>   # [5,]   26    5   12   33   19
>   # [6,]   27   34   20   13    6
>   # [7,]   35   28   14    7   21
>
> which looks right!
> Ted.
>
> -------------------------------------------------
> E-Mail: (Ted Harding) <Ted.Harding@wlandres.net>
> Date: 14-May-2013  Time: 11:07:46
> This message was sent by XFMail
>
> ______________________________________________
> 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.
>



-- 
Tsjerk A. Wassenaar, Ph.D.

	[[alternative HTML version deleted]]

