4

认为:

x <- c(2,-5)
y <- c(1,2,3)

我怎样才能得到 :

z = c(2-1, 2-2, 2-3, -5-1, -5-2, -5-3) = c(1, 0, -1, -6, -7, -8)
4

4 回答 4

12

使用outer

> as.vector(outer(x, y, '-'))
# [1]  1 -6  0 -7 -1 -8

如果你想要另一种方式:

> as.vector(t(outer(x, y, '-')))
# [1]  1  0 -1 -6 -7 -8
于 2013-03-18T08:07:32.757 回答
9

您可以rep按如下方式使用:

rep(x, each = length(y)) - y
# [1]  1  0 -1 -6 -7 -8
于 2013-03-18T08:04:02.487 回答
5

为了添加替代品而添加答案..

> x
[1]  2 -5
> y
[1] 1 2 3
> rowSums(expand.grid(-y,x))
[1]  1  0 -1 -6 -7 -8
于 2013-03-18T09:24:56.247 回答
4

分两步(不如@Ananda 解决方案优雅),使用expand.grid

 d <- expand.grid(x,y)
 transform(d,difference = d$Var1 -d$Var2)
  Var1 Var2 difference
1    2    1          1
2   -5    1         -6
3    2    2          0
4   -5    2         -7
5    2    3         -1
6   -5    3         -8

但我认为我的更具可读性:)(你知道你从什么中减去什么)

于 2013-03-18T08:06:10.773 回答