Thank you all for your responses.
The real problem is that all your answer work for products 2 by 2.
I now have to do the product n by n row.
Do you have a solution ?
Thank you in advance,
E.H.


Edouard Hardy


On Mon, Sep 2, 2013 at 5:43 PM, arun <smartpink...@yahoo.com> wrote:

> I guess in such situations,
>
>
> fun1<- function(mat){
>  if(nrow(mat)%%2==0){
>  j<- 2*seq_len(nrow(mat)/2)
>  b<- mat[j,]* mat[j-1,]
>  }
>  else {mat1<- mat[-nrow(mat),]
>  j<- 2*seq_len(nrow(mat1)/2)
>  b<- rbind(mat1[j,]*mat1[j-1,],mat[nrow(mat),])
>   }
> b
> }
> fun1(A)
> #     [,1] [,2] [,3]
> #[1,]    4   10   18
> #[2,]   63   64   63
> #[3,]   18   10    4
>  fun1(Anew)
> #     [,1] [,2] [,3]
> #[1,]    4   10   18
> #[2,]   63   64   63
> #[3,]   18   10    4
> #[4,]    1    3    5
>
>
> A.K.
>
>
>
> ----- Original Message -----
> From: arun <smartpink...@yahoo.com>
> To: Bert Gunter <gunter.ber...@gene.com>
> Cc: R help <r-help@r-project.org>
> Sent: Monday, September 2, 2013 11:26 AM
> Subject: Re: [R] Product of certain rows in a matrix
>
> Hi Bert,
> Thanks.  It is a better solution.
>
> If nrow() is not even.
>
> Anew<- rbind(A,c(1,3,5))
> j<-seq_len(nrow(Anew)/2)###
>  Anew[j,]*Anew[j-1,]
> #Error in Anew[j, ] * Anew[j - 1, ] : non-conformable arrays
>
>
> t(sapply(split(as.data.frame(Anew),as.numeric(gl(nrow(Anew),2,7))),colProds))
>   [,1] [,2] [,3]
> 1    4   10   18
> 2   63   64   63
> 3   18   10    4
> 4    1    3    5
>
> A.K.
>
>
>
>
>
>
> ________________________________
> From: Bert Gunter <gunter.ber...@gene.com>
> To: arun <smartpink...@yahoo.com>
> Cc: R help <r-help@r-project.org>
> Sent: Monday, September 2, 2013 10:55 AM
> Subject: Re: [R] Product of certain rows in a matrix
>
>
>
> These elaborate manipulations are unnecessary and inefficient. Use
> indexing instead:
>
> j <- 2*seq_len(nrow(A)/2)
> b <- A[j,]*A[j-1,]
> b
> [,1] [,2] [,3]
> [1,]    4   10   18
> [2,]   63   64   63
> [3,]   18   10    4
>
> [,1] [,2] [,3]
> [1,]    4   10   18
> [2,]   63   64   63
> [3,]   18   10    4
> [,1] [,2] [,3]
> [1,]    4   10   18
> [2,]   63   64   63
> [3,]   18   10    4[,1] [,2] [,3]
> [1,]    4   10   18
> [2,]   63   64   63
> [3,]   18   10    4
> [,1] [,2] [,3]
> [1,]    4   10   18
> [2,]   63   64   63
> [3,]   18   10    4
>
>
>
>
>
> On Mon, Sep 2, 2013 at 7:25 AM, arun <smartpink...@yahoo.com> wrote:
>
> Hi,
> >You could try:
> >
> >A<- matrix(unlist(read.table(text="
> >1 2 3
> >4 5 6
> >7 8 9
> >9 8 7
> >6 5 4
> >3 2 1
> >",sep="",header=FALSE)),ncol=3,byrow=FALSE,dimnames=NULL)
> >
> >library(matrixStats)
>
> > res1<-t(sapply(split(as.data.frame(A),as.numeric(gl(nrow(A),2,6))),colProds))
> > res1
> >#  [,1] [,2] [,3]
> >#1    4   10   18
> >#2   63   64   63
> >#3   18   10    4
> >
> >
>
> > res2<-t(sapply(split(as.data.frame(A),((seq_len(nrow(A))-1)%/%2)+1),colProds))
> > identical(res1,res2)
> >#[1] TRUE
> >
> >#or
> > t(sapply(split(as.data.frame(A),as.numeric(gl(nrow(A),2,6))),function(x)
> apply(x,2,prod)))
> >
> >#or
> >library(plyr)
>
> > as.matrix(ddply(as.data.frame(A),.(as.numeric(gl(nrow(A),2,6))),colProds)[,-1])
> >#     V1 V2 V3
> >#[1,]  4 10 18
> >#[2,] 63 64 63
> >#[3,] 18 10  4
> >
> >#or
> >do.call(rbind,tapply(seq_len(nrow(A)),list(as.numeric(gl(nrow(A),2,6))),FUN=function(x)
> colProds(A[x,])))
> >#or
> >A1<- data.frame(A,ID=as.numeric(gl(nrow(At),2,6)))
> > aggregate(A1[,-4],list(A1[,4]),colProds)[,-1]
> >#  X1 X2 X3
> >#1  4 10 18
> >#2 63 64 63
> >#3 18 10  4
> >
> >#or
> >library(data.table)
> >At<- data.table(A1,key='ID')
> >subset(At[,lapply(.SD,colProds),by=ID],select=-1)
> >#   X1 X2 X3
> >#1:  4 10 18
> >#2: 63 64 63
> >#3: 18 10  4
> >
> >A.K.
> >
> >
> >
> >
> >Hello,
> >
> >I have this matrix :
> >A =
> >1 2 3
> >4 5 6
> >7 8 9
> >9 8 7
> >6 5 4
> >3 2 1
> >
> >I would like to have this matrix (product of rows 2 by 2) :
> >A =
> >4 10 18
> >63 64 63
> >18 10 4
> >
> >Is it possible to do that without a loop ?
> >
> >Thank you in advance !
> >
> >______________________________________________
> >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.
> >
>
>
> --
>
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
>
> Internal Contact Info:
> Phone: 467-7374
> Website:
>
>
> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm
>
> ______________________________________________
> 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.
>

        [[alternative HTML version deleted]]

______________________________________________
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.

Reply via email to