我试图找出许多数字对之间的区别。
这些数字是两个长度不等的向量。例如,
a<- c(1:5)
b<- c(1:10)
现在,我需要一些方法来计算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]
我很擅长在R中编写函数。我也是使用* apply函数组的新手。我一直试图结合我所学的关于编写函数和* apply函数组来解决这个问题,但它还没有发生。谢谢你的帮助!
P.S。对不起,如果之前有人询问过。我搜索了但找不到答案。
答案 0 :(得分: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
答案 1 :(得分: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中的向量是所述标量与向量的每个元素之间的逐元素减法的事实,我们可以简单地将减-
运算符应用于{{中的每个值。 1}}针对整个向量a
。