?sweep() would be a bit slower compared to other two methods.
b1<-do.call(rbind,replicate(1e6,b,simplify=FALSE)) system.time(res1<- t(a*t(b1))) # user system elapsed # 0.044 0.000 0.044 system.time(res2<- sweep(b1,2,a,"*")) # user system elapsed # 0.14 0.00 0.14 system.time(res3<- b1%*% diag(a)) # user system elapsed # 0.084 0.000 0.083 identical(res1,res2) #[1] TRUE all.equal(res1,res3) #[1] TRUE A.K. ________________________________ From: Pascal Oettli <kri...@ymail.com> To: Edouard Hardy <hardy.edou...@gmail.com> Cc: R help <r-help@r-project.org>; arun <smartpink...@yahoo.com> Sent: Monday, September 16, 2013 11:38 PM Subject: Re: [R] A factor times a matrix Hello, To complete Arun's response, you also have: > sweep(b,2,a,'*') [,1] [,2] [1,] 1 8 [2,] 2 10 [3,] 3 12 or > b %*% diag(a) [,1] [,2] [1,] 1 8 [2,] 2 10 [3,] 3 12 Regards, Pascal 2013/9/17 arun <smartpink...@yahoo.com> Hi, > t(a*t(b)) ># [,1] [,2] >#[1,] 1 8 >#[2,] 2 10 >#[3,] 3 12 > >A.K. > > >Hello eveybody, > >I have a vector a and a matrix b : >> a >[1] 1 2 >> b >[,1] [,2] >[1,] 1 4 >[2,] 2 5 >[3,] 3 6 > >With simple multiplication I get : >> a * b >[,1] [,2] >[1,] 1 8 >[2,] 4 5 >[3,] 3 12 > >I would like to have that : >[,1] [,2] >[1,] 1 8 >[2,] 2 10 >[3,] 3 12 > >Fo now I use replicate bu I would like to do this in a simple way. > >Do you have a solution ? > >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. > -- Pascal Oettli Project Scientist JAMSTEC Yokohama, Japan ______________________________________________ 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.