乘以矢量组合

时间:2013-08-14 20:39:10

标签: r

正常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的每个最大速度组合。

*请注意,由于反电动势,它将在此速度下产生零扭矩。

2 个答案:

答案 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)