Multiplying vector combinations
r
Solution
You are probably looking for `outer()` or it's alias binary operator `%o%`:
> c(2,3,4) %o% c(1,2)
[,1] [,2]
[1,] 2 4
[2,] 3 6
[3,] 4 8
> outer(c(2,3,4), c(1,2))
[,1] [,2]
[1,] 2 4
[2,] 3 6
[3,] 4 8
In your case, `outer()` offers the flexibility to specify a function that is applied to the combinations; `%o%` only applies the `*` multiplication function. For your example and data
mph <- function(d, rpm) {
cir <- pi * d
cir * rpm / 63360 * 60
}
> outer(c(20,26,29), c(150,350), FUN = mph)
[,1] [,2]
[1,] 8.924979 20.82495
[2,] 11.602473 27.07244
[3,] 12.941220 30.19618
Problem
Normal R vector multiplication, only multiplies vectors once, or recycles the shorter vector. IE: ``` > c(2,3,4) * c(1,2) [1] 2 6 4 Warning message: In c(2, 3, 4) * c(1, 2) : longer object length is not a multiple of shorter object length ``` What I would like to do is to multiply every combination of two vectors. In this specific case, I'm calculating the maximum speed in MPH that an electric bicycle motor can spin:* ``` d <- c(20,26,29) #bicycle wheel diameter possibilities in inches rpm <- c(150,350) #maximum motor RPM. Choices depends on motor winding. cir <- pi * d #circumference mph <- cir * rpm / 63360 * 60 #max speed in mph for each wheel diameter and RPM combination mph ``` What I would like is for mph to contain every maximum speed combination of the given wheel diameters with the given max motor RPM. * Please note that it will be generating zero torque at this speed because of back EMF.