正常R向量乘法,仅将向量乘以一次,或者回收较短的向量。 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
我想要做的是将两个向量的每个组合相乘。在这种特殊情况下,我计算电动自行车电机可以旋转的MPH最大速度:*
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
我希望mph能够包含给定车轮直径与给定最大电机RPM的每个最大速度组合。
*请注意,由于反电动势,它将在此速度下产生零扭矩。
答案 0 :(得分:10)
您可能正在寻找outer()
或它的别名二元运算符%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
在您的情况下,outer()
可以灵活地指定应用于组合的函数; %o%
仅适用*
乘法函数。对于您的示例和数据
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
答案 1 :(得分:5)
我相信您正在寻找的功能是outer
> outer(cir, rpm, function(X, Y) X * Y / 63360 * 60)
[,1] [,2]
[1,] 8.924979 20.82495
[2,] 11.602473 27.07244
[3,] 12.941220 30.19618
在这种情况下,您可以稍微清理一下符号:
outer(cir, rpm / 63360 * 60)