[R] Adding numbers in Outputs

Peter Ehlers ehlers at ucalgary.ca
Fri Dec 10 14:50:56 CET 2010


On 2010-12-10 02:41, Amelia Vettori wrote:
> two OutputsHello!
>
> I am Amelia from Auckland and work for a bank. I am new to R and I have started my venture with R just a couple of weeks back and this is my first mail to R-forum. I need following assistance
>
> Suppose my R code generates following outputs as
>
>
>> X
> [[1]]
> [1] 40
>
> [[2]]
> [1] 80    160
>
> [[3]]
> [1] 160   80  400
>
>
>> Y
>
> [[1]]
>
> [1] 10
>
>
>
> [[2]]
>
> [1] 10    30
>
>
>
> [[3]]
>
> [1] 5  18  20
>
> and suppose
>
> Z = c(1, 2, 3)
>
> I need to perform the calculation where I will be multiplying corresponding terms of X and Y individually and multiplying their sum by Z and store these results in a dataframe.
>
> I.e. I need to calculate
>
> (40*10) * 1                                 # (first element of X + First element of Y) * Z[1] = 400
>
> ((80*10)+(160*30)) * 2                 # 2 row of X and 2nd row of Y = 11200
>
> ((160*5)+(80*18)+(400*20)) * 3     # 3rd row of X and 3 row of Y and Z[3] =  30720
>
>
>
> So the final output should be
>
> 400
> 11200
> 30720
>
>
> One way of doing it is write R code for individual rows and
>   arrive at the result e.g.
>
> ([[X]][1]*[[Y]][1])*1 will result in 400. However, I was just trying to know some smart way of doing it as there could be number of rows and writing code for each row will be a cumbersome job. So is there any better way to do it?
>
> Please guide me.
>

Why not just write a function to do what
you've done by hand:

  f <- function(x, y, z){
    len <- length(x)
    res <- rep(NA, len)
    for(i in 1:len){
      res[i] <- sum(x[[i]] * y[[i]]) * z[i]
    }
    res
  }

  f(X, Y, Z)

Peter Ehlers

> I thank you in advance.
>
> Thanking
>   all
>
> Amelia
>



More information about the R-help mailing list