# [R] apply on rows and columns?

Justin Haynes jtor14 at gmail.com
Wed Nov 16 21:25:12 CET 2011

```To expand on what Sarah and Michael said:

if you have a 3d array:

> x<-array(1:4,c(2,2,4))
> x
, , 1

[,1] [,2]
[1,]    1    3
[2,]    2    4

, , 2

[,1] [,2]
[1,]    1    3
[2,]    2    4

, , 3

[,1] [,2]
[1,]    1    3
[2,]    2    4

, , 4

[,1] [,2]
[1,]    1    3
[2,]    2    4

> apply(x,c(1,2),sum)
[,1] [,2]
[1,]    4   12
[2,]    8   16

a margin of c(1,2) makes more sense.  Hope that clarifies things.

Justin

On Wed, Nov 16, 2011 at 12:18 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote:
> Hi,
>
> On Wed, Nov 16, 2011 at 3:13 PM,  <rkevinburton at charter.net> wrote:
>>
>> I have the following scenario:
>>
>>> m <- matrix(1:4, ncol=2)
>>> m
>>      [,1] [,2]
>> [1,]    1    3
>> [2,]    2    4
>>> apply(m, 2, sum)
>> [1] 3 7
>>> apply(m, 1, sum)
>> [1] 4 6
>>
>> So I can apply to rows *or* columns. According to the documentation
>> (?apply)
>>
>> MARGIN a vector giving the subscripts which the function will be applied
>> over. E.g., for a matrix 1 indicates rows, 2 indicates columns, c(1, 2)
>> indicates rows and columns. Where X has named dimnames, it can be a
>> character vector selecting dimension names.
>>
>>
>> But I get the following results:
>>
>>> apply(m, c(1,2), sum)
>>      [,1] [,2]
>> [1,]    1    3
>> [2,]    2    4
>>
>> How am I to interpret this result?
>
> I'm pretty sure R is taking the sum of m[1,1] and putting it [1,1],
> and the sum of m[1,2] and putting it in [1,2] and so on. You
> instructed apply() to work on rows and columns *simultaneously*,
> rather than sequentially.
>
> apply() on c(1,2) is useful if you have a matrix that's three-dimensional,
> but not so much if it's two dimensional.
>
> What are you trying to accomplish?
>
> Sarah
>
>
>
>
> --
> Sarah Goslee
> http://www.functionaldiversity.org
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help