Skip to content

VERY SIMPLE QUESTION

5 messages · Kathie, Henrique Dallazuanna, Christian Raschke +1 more

#
Dear R users,

I am looking for more efficient way to compute the followings

--------------------------------------------------------------------------

a <- matrix(c(1,1,1,1,2,2,2,2),4,2)
b <- matrix(c(1,2,3,4),4,1)

Eventually, I want to get this matrix, `c`.

c <- matrix(c(1/1,1/2,1/3,1/4,2/1,2/2,2/3,2/4),4,2)

--------------------------------------------------------------------------

In fact, #column of `a` is so big..

Is there a more efficient way to compute this instead of using "apply" or
something? or "apply" is only way..?

Any suggestion will be greatly appreciated.

Regards,

Kathryn Lord
#
Try this:

sweep(a, 1, b, '/')
On Fri, Apr 16, 2010 at 2:30 PM, Kathie <kathryn.lord2000 at gmail.com> wrote:

  
    
#
Since b is only one column, just make it a vector.
then
[,1]      [,2]
[1,] 1.0000000 2.0000000
[2,] 0.5000000 1.0000000
[3,] 0.3333333 0.6666667
[4,] 0.2500000 0.5000000

should be what you want. 

It is also a bad idea to name the resulting matrix "c" since c(...) is a
primitive function.

Christian
On Fri, 2010-04-16 at 09:30 -0800, Kathie wrote:

  
    
#
On Fri, 2010-04-16 at 09:30 -0800, Kathie wrote:
Is there a reason why 'b' is a matrix?

Anyway, if b is a matrix with more cols in your real world problem,

sweep(a, 1, b[,1], "/")

will get what you want.

Otherwise

sweep(a, 1, b, "/")

will work whether b is a one col matrix or if you change it to a vector.

HTH

G