假设我制作的零件有三种尺寸,每种尺寸都有一定的公差:
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
}
答案 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