user3338639
user3338639

Reputation: 49

R Multiplying a list of lists with a vector

I have a dataframe with 1 column consisting of 10 lists each with a varying number of elements. I also have a vector with 10 different values in it (10 integers).

I want to take the "sumproduct" of each 10 lists with its corresponding vector value, and end up with 10 values.

Value 1 = sumproduct(First list, First vector value)
Value 2 = sumproduct(Second list, Second vector value)
etc...

Final_Answer <- c(Value 1, Value 2, ... , Value 10)

I have a function that generates the dataframe containing lists of numbers representing years. The dataframe is contructed using a loop to generate each value then rowbinding the value together with the dataframe.

Time_Function <- function(Maturity)
{for (i in 0:Count) 
  {x<-as.numeric(((as.Date(as.Date(Maturity)-i*365)-Start_Date)/365)
  Time <- rbind(Time, data.frame(x))}
return((Time))
}

The result is this:

http://pastebin.com/J6phR2hv

https://i.sstatic.net/qlVP3.png

If my vector looks like [1,2,3,4...,10], I want the output to be: Final Answer = [(1*1.1342466 + 1*0.6342466 + 1* 0.1342466), (2*1.3835616 + 2*0.8835616 + 2*0.3835616), ... , ( ... +10*0.0630137)]

Upvotes: 1

Views: 901

Answers (1)

Eugene
Eugene

Reputation: 406

Assuming you want to multiply each value in the list by the respective scalar and then add it all up, here is one way to do it.

list1 <- mapply(rep, 1:10, 10:1)
vec1 <- 1:10

df <- data.frame( I(list1), vec1)
df
          list1 vec1
1  1, 1, 1,....    1
2  2, 2, 2,....    2
3  3, 3, 3,....    3
4  4, 4, 4,....    4
5  5, 5, 5,....    5
6  6, 6, 6,....    6
7    7, 7, 7, 7    7
8       8, 8, 8    8
9          9, 9    9
10           10   10

mapply(df$list1, df$vec1, FUN = function(x, y) {y* sum(x)})

[1]  10  36  72 112 150 180 196 192 162 100

Upvotes: 2

Related Questions