6

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

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

4

2 回答 2

12

您可能正在寻找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
于 2013-08-14T20:42:52.820 回答
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)
于 2013-08-14T20:42:08.437 回答