Thanks Gabor!



On Wed, Jul 27, 2011 at 3:08 AM, Gabor Grothendieck <ggrothendieck@gmail.com
> wrote:

> On Wed, Jul 27, 2011 at 4:06 AM, steven mosher <moshersteven@gmail.com>
> wrote:
> > there are really two related problems here
> >
> > I have a 2D matrix
> >
> >
> > A <- matrix(1:100,nrow=20,ncol =5)
> >
> >
> > S <- matrix(1:10,nrow=2,ncol =5)
> >
> >
> > #I want to subtract S from A. so that S would be subtracted from the
> > first 2 rows of
> >
> > #A, then the next two rows and so on.
> >
> >
> > #I have a the same problem with a 3D array
> >
> > # where I want to subtract Q for every layer (1-10) in Z
> >
> > # I thought I solved this one with  array(mapply("-",Z,Q),dim=dim(Z))
> >
> > # but got the wrong answers
> >
> >
> > Z <- array(1:100,dim=c(2,5,10))
> >
> > Q <- matrix(1:10,nrow=2,ncol =5)
> >
>
> For the first one:
>
>   matrix(c(t(A)) - c(t(S)), nrow(A), byrow = TRUE)
>
> or this version which may seem a bit more complex but has the
> advantage that it shows the general form of which both your questions
> are special cases:
>
>    ix <- 2:1
>    aperm(array(c(aperm(A, ix)) - c(t(S)), dim(A)[ix]), ix)
>
> Now, as mentioned, the answer to second question is the same except for ix:
>
>    ix <- c(2, 1, 3)
>    aperm(array(c(aperm(Z, ix)) - c(t(Q)), dim(Z)[ix]), ix)
>
>
> --
> Statistics & Software Consulting
> GKX Group, GKX Associates Inc.
> tel: 1-877-GKX-GROUP
> email: ggrothendieck at gmail.com
>

	[[alternative HTML version deleted]]

