6

通常の R ベクトル乗算、ベクトルを 1 回だけ乗算するか、短いベクトルをリサイクルします。いいえ:

> 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

私がやりたいのは、2 つのベクトルのすべての組み合わせを乗算することです。この特定のケースでは、電動自転車のモーターが回転できる最大速度を 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

私が望むのは、指定されたホイール直径と指定された最大モーター RPM のすべての最大速度の組み合わせを mph に含めることです。

* この速度では、逆起電力のためにゼロ トルクが生成されることに注意してください。

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 に答える