Reputation: 3591
I want a function to return the product of all the values in a vector, like sum
but with multiplication instead of addition. I expected this to exist already, but if it does I can't find it. Here's my solution:
product <- function(vec){
out <- 1
for(i in 1:length(vec)){
out <- out*vec[i]
}
out
}
This behaves the way I want it to. For example:
> product(1:3)
[1] 6
Is there a better way of doing this, either with an existing function or through an improvement to this custom one?
Upvotes: 51
Views: 81475
Reputation: 644
This is a textbook use case for a reduce
function, one of the foundational pillars of functional programming. Try this:
Reduce(x=1:5, f='*')
It produces 120 as expected.
Upvotes: 1
Reputation: 23630
If your data is all greater than zero this is a safer solution that will not cause compute overflows:
exp(sum(log(x)))
Upvotes: 6