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

Jim*_*son 5 r vector

我试图找到许多数字对之间的差异.

这些数字是两个长度不等的向量.例如,

    a<- c(1:5)
    b<- c(1:10)
Run Code Online (Sandbox Code Playgroud)

现在,我需要一些方法来计算a [[1]] - b然后a [[2]] - b等等,直到[[5]] - b.这些计算中的每一个都应该产生一个10个数字长的向量.

这些差异向量中的每一个应该作为列存储在数据帧中.第一列应该减去"b"的位置,随后的列应该以"a"的位置标题(所以有5列和10行).

         a[1] a[2] ... a[5]
    b[1]
    b[2]
    ...
    b[10]
Run Code Online (Sandbox Code Playgroud)

我很擅长在R中编写函数.我也是使用*apply函数组的新手.我一直试图结合我所学的关于编写函数和*apply函数组来解决这个问题,但它还没有发生.谢谢您的帮助!

PS对不起,如果之前有人询问过.我搜索但找不到答案.

989*_*989 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
Run Code Online (Sandbox Code Playgroud)


cat*_*ure 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
Run Code Online (Sandbox Code Playgroud)

解释

利用 R 中的标量减去向量是所述标量与向量的每个元素之间的逐元素减法这一事实,我们可以简单地将减运算符应用于整个向量-中的每个值。ab