[R] z[i,j] = x[i,j] * y(i+j) ?

Gabor Grothendieck ggrothendieck at gmail.com
Thu Jul 30 06:10:52 CEST 2009


Try this:

z <- x * y[row(x) + col(x)]

z2 <- x
for(i in 1:nr) for(j in 1:nc) z2[i,j] <- x[i,j] * y[i+j]

all.equal(z, z2) # TRUE



On Wed, Jul 29, 2009 at 11:56 PM, glen_b<glnbrntt at gmail.com> wrote:
>
>
> For the life of me I couldn't work out what to searc
>
> I have an m*n numeric matrix x and a numeric vector y (of length m+n-1)
>
> How do I do a calculation like this?
>
> z[i,j] = x[i,j] * y[i+j] ?
>
>
> Well, one can write a pair of loops, or write a single loop
> within which we calculate a vector at a time, but ...
>
> is there a "neat" way to do it?
>
> tiny example:
> x<-matrix(data=c(32,46,21,28,58,60,33,32,16,NA,10,15),nrow=4)
> y<-c(1.1,1.09,1.08,1.06,1.05,1.02)
> z<-matrix(nrow=4,ncol=3)
>
> z[,1]=x[,1]*y[1:4]
> z[,2]=x[,2]*y[2:5]
> z[,3]=x[,3]*y[3:6]
>
> which produces:
>
>> x
>     [,1] [,2] [,3]
> [1,]   32   58   16
> [2,]   46   60   NA
> [3,]   21   33   10
> [4,]   28   32   15
>
>> y
> [1] 1.10 1.09 1.08 1.06 1.05 1.02
>
>> z
>      [,1]  [,2]  [,3]
> [1,] 35.20 63.22 17.28
> [2,] 50.14 64.80    NA
> [3,] 22.68 34.98 10.50
> [4,] 29.68 33.60 15.30
>
>> z/x
>     [,1] [,2] [,3]
> [1,] 1.10 1.09 1.08
> [2,] 1.09 1.08   NA
> [3,] 1.08 1.06 1.05
> [4,] 1.06 1.05 1.02
>
> (this last to indicate what each element of x was multiplied by to produce
> z... well, apart from the NA)
>
> Thanks for any pointers
>
> Glen
>
> --
> View this message in context: http://www.nabble.com/z-i%2Cj--%3D-x-i%2Cj--*-y%28i%2Bj%29---tp24731799p24731799.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at 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.
>




More information about the R-help mailing list