认为:
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)
认为:
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)
使用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
您可以rep
按如下方式使用:
rep(x, each = length(y)) - y
# [1] 1 0 -1 -6 -7 -8
为了添加替代品而添加答案..
> x
[1] 2 -5
> y
[1] 1 2 3
> rowSums(expand.grid(-y,x))
[1] 1 0 -1 -6 -7 -8
分两步(不如@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
但我认为我的更具可读性:)(你知道你从什么中减去什么)