Cool,

 I looked at sweep but didnt consider it as I thought it was restricted to
certain functions.
So thanks for that solution.

  yes the data is very large and the future work will increase 10 fold,

as for the matrix one I'm not too keen on replicating the smaller matrix,
I've had one guy using the package who has hit the memory limits.. I have
one more thing to try

Thanks!

Steve

On Wed, Jul 27, 2011 at 1:42 AM, Gavin Simpson <gavin.simpson@ucl.ac.uk>wrote:

> On Wed, 2011-07-27 at 01:06 -0700, steven mosher 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.
>
> For this one, I have used the following trick to replication a matrix
>
>    do.call(rbind, rep(list(mat), N)
>
> where we convert the matrix, `mat`, to a list and repeat that list `N`
> times, and arrange for the resulting list to be rbind-ed. For your
> example matrices, the following does what you want:
>
>    A - do.call(rbind, rep(list(S), nrow(A)/nrow(S)))
>
> Whether this is useful will depend on the dimension of A and S - from
> your posts on R-Bloggers, I can well imagine you are dealing with large
> matrices.
>
> > #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 this one, consider the often overlooked function `sweep()`:
>
>    sweep(Z, c(1,2), Q, "-")
>
> does what you wanted. c(1,2) is the `MARGIN` argument over the
> dimensions that Q will be swept from.
>
> HTH
>
> G
>
> --
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
>  Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
>  ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
>  Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
>  Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
>  UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
> %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
>
>

	[[alternative HTML version deleted]]

