找出两个向量所有数值之间的差异。

5

我正在尝试找出许多数字对之间的差异。

这些数字在两个长度不相等的向量中。例如,

    a<- c(1:5)
    b<- c(1:10)

现在,我需要一种计算a[[1]] - b,然后a[[2]] - b等的方法,直到a[[5]] - b。每个计算结果应该是一个包含10个数字的向量。

这些差异向量中的每一个都应被存储为数据框的列。第一列应该是´b´位置减去的位置,并且随后的列应该以´a´的位置为标题(因此有5列和10行)。

         a[1] a[2] ... a[5]
    b[1]
    b[2]
    ...
    b[10]

我非常新手在R中编写函数。我也是第一次使用*apply函数组。我一直在尝试结合我所学的关于编写函数和*apply函数组的知识来解决这个问题,但目前还没有成功。谢谢你的帮助!
附言:如果之前有人问过这个问题,请不要介意。我已经搜索了,但找不到答案。

2
非常接近:https://stackoverflow.com/q/30562308/4137985 - Cath
2个回答

6
这是一个outer的工作:
t(outer(a, b, '-'))

     # [,1] [,2] [,3] [,4] [,5]
 # [1,]    0    1    2    3    4
 # [2,]   -1    0    1    2    3
 # [3,]   -2   -1    0    1    2
 # [4,]   -3   -2   -1    0    1
 # [5,]   -4   -3   -2   -1    0
 # [6,]   -5   -4   -3   -2   -1
 # [7,]   -6   -5   -4   -3   -2
 # [8,]   -7   -6   -5   -4   -3
 # [9,]   -8   -7   -6   -5   -4
# [10,]   -9   -8   -7   -6   -5

你和 @Roland 几乎同时发布了完全相同的答案,哈哈。 - catastrophic-failure

4
sapply(a, "-", b)
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    0    1    2    3    4
# [2,]   -1    0    1    2    3
# [3,]   -2   -1    0    1    2
# [4,]   -3   -2   -1    0    1
# [5,]   -4   -3   -2   -1    0
# [6,]   -5   -4   -3   -2   -1
# [7,]   -6   -5   -4   -3   -2
# [8,]   -7   -6   -5   -4   -3
# [9,]   -8   -7   -6   -5   -4
#[10,]   -9   -8   -7   -6   -5

解释

利用在 R 语言中,标量(scalar)减去向量(vector)相当于将该标量分别与向量中每个元素相减的特点,我们可以直接使用减号运算符-对向量b中的每个值与整个向量a中的每个值进行相减。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接