Hi, What is the elegant script to divide the columns of a matrix by the respective position of a vector elements? m=rbind(c(6,4,2),c(3,2,1)) v= c(3,2,1) res= 6/3 4/2 2/1 3/3 2/2 1/1 this is correct mat2 = NULL for (i in 1: ncol(m)) mat2 = cbind(mat2, m[,i]/ v[i]) but how to do more compact and elegant with for ex do.call? Many thanks Carol [[alternative HTML version deleted]]
You don't need do.call:> t(t(m)/v)[,1] [,2] [,3] [1,] 2 2 2 [2,] 1 1 1> t(apply(m, 1, function(x) x/v))[,1] [,2] [,3] [1,] 2 2 2 [2,] 1 1 1 ------------------------------------- David L Carlson Department of Anthropology Texas A&M University College Station, TX 77840-4352 -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of carol white Sent: Wednesday, May 14, 2014 9:52 AM To: r-help at stat.math.ethz.ch Subject: [R] matrix column division by vector Hi, What is the elegant script to divide the columns of a matrix by the respective position of a vector elements? m=rbind(c(6,4,2),c(3,2,1)) v= c(3,2,1) res= 6/3?? 4/2? 2/1 ??????? 3/3?? 2/2 ?? 1/1 this is correct? mat2 = NULL for (i in 1: ncol(m)) ??? mat2 = cbind(mat2, m[,i]/ v[i]) but how to do more compact and elegant with for ex do.call? Many thanks Carol [[alternative HTML version deleted]]
Please post in plain text... your email is getting distorted and hard to read by
the HTML.
I don't know how to use do.call for this, but when you understand how
vectors recycle and matrices and arrays are laid out in memory (read the
Introduction to R document if not) then the following comes to mind:
mat2 <- m / matrix( v, ncol=ncol(m), nrow=nrow(m), byrow=TRUE )
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live
Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...1k
---------------------------------------------------------------------------
Sent from my phone. Please excuse my brevity.
On May 14, 2014 7:51:36 AM PDT, carol white <wht_crl at yahoo.com>
wrote:>Hi,
>What is the elegant script to divide the columns of a matrix by the
>respective position of a vector elements?
>
>m=rbind(c(6,4,2),c(3,2,1))
>
>v= c(3,2,1)
>
>res= 6/3?? 4/2? 2/1
>??????? 3/3?? 2/2 ?? 1/1
>
>
>this is correct?
>mat2 = NULL
>
>for (i in 1: ncol(m))
>
>??? mat2 = cbind(mat2, m[,i]/ v[i])
>
>
>but how to do more compact and elegant with for ex do.call?
>
>Many thanks
>
>Carol
> [[alternative HTML version deleted]]
>
>
>
>------------------------------------------------------------------------
>
>______________________________________________
>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.