将矢量的每个分量乘以另一个矢量(得到长度为m * n的矢量)

时间:2016-05-03 20:51:39

标签: r

假设我制作的零件有三种尺寸,每种尺寸都有一定的公差:

target <- c(2, 4, 6)
tolerance <- c(0.95, 1.05)

我最想得到的是一个数组,其中包含每个目标的容差限制(即目标* 0.95,目标* 1.05):

tol = (2*0.95, 2*1.05, 4*0.95, 4*1.05, 6*0.95, 6*1.05)

这是一种非常难看的方式,但我知道有一种简单的方法可以做到这一点。

j<-1
tol<-NULL
for (i in target){
tol[j] <- i*tolerance[1]
tol[j+1] <- i*tolerance[2]
j<-j+2
}

4 个答案:

答案 0 :(得分:3)

您可以使用矩阵产品实现这一目标:

target <- c(2, 4, 6)
tolerance <- c(0.95, 1.05)
target %*% t(tolerance)
     [,1] [,2]
[1,]  1.9  2.1
[2,]  3.8  4.2
[3,]  5.7  6.3

答案 1 :(得分:3)

可以使用tol计算向量outer(),如下所示:

tol <- c(outer(tolerance,target))
#> tol
#[1] 1.9 2.1 3.8 4.2 5.7 6.3

答案 2 :(得分:2)

另一个答案会有我的偏好,但是这个替代方案可能会在某些特定情况下更好地推广(超过两个向量)

Reduce("*", expand.grid(list(tolerance, target)))

答案 3 :(得分:0)

主要是为了好玩 - 使用R的回收:

rep(target, each = length(tolerance)) * tolerance
#[1] 1.9 2.1 3.8 4.2 5.7 6.3