r——矩阵元素的累计和



我有一个矩阵,定义为数组元素之间的成对差异:

a <- as.matrix(dist(c(1,2,3,4,5)))

我需要在不循环的情况下计算前两个元素、前三个元素等之间的成对差的总和,即,我需要到达阵列:

v <- c(1,4,10,20)

尝试

 head(cumsum(cumsum(1:5)),-1)
 #[1]  1  4 10 20

我不知道你是否真的想调用累积和函数两次,因为我认为"前两个元素、前三个元素等之间的成对差的总和"应该会导致:

c(1, 3, 6, 10)

无论如何,这应该也适用于非顺序x,用于您所需的输出:

> cumsumdiff <- function (x) cumsum(cumsum(sapply(x[-1], `-`, x[1])))
> cumsumdiff(1:5)
[1]  1  4 10 20

或者基于@Jota的建议,使用距离矩阵:

> cumsumdiff <- function(x) cumsum(cumsum(unname(as.matrix(dist(x))[1, -1])))
> cumsumdiff(1:5)
[1]  1  4 10 20

相关内容

  • 没有找到相关文章

最新更新