副标题:倒序求和
正序求和代码是cumsum()
什么是倒序累加?
例如我们有一个矩阵MM.Matrix,我们想要实现的目标是如下第二个矩阵
它的数学表达式是:
实现步骤:
Step1:
rev一下data.frame(矩阵),获得一个数据框
因为rev作用在data.frame上与作用在矩阵上的效果完全不同。rev作用在数据框上,将最后一列写在第一列,将倒数第二列写在第二列。
Step2:
转置,获得一个矩阵
Step3:
累加函数cumsum作用于数据框上,即cumsum(as.data.frame()),获得一个数据框
因为cumsum函数作用于数据框上和作用于矩阵上的效果完全不一样。
Step4:
转置,获得一个矩阵,
Step5:
使用rev函数作用于数据框上,即rev(as.data.frame()),获得一个数据框
-----至此,我们可以将上述步骤总结起来,写成一个R自定义函数,便于使用。
将上述代码编写成一个函数:
倒序累加求和:reverse accumulation,在R中累加求和的函数是cumsum,倒序的函数是rev,函数function一词的简写fun,这个是函数名字的由来。
# 编写成一个函数
#input matrix
#output matrix
rev.cumsum.fun <- function(Matrix){
rev.ENij <- rev(as.data.frame(Matrix))
t.rev.ENij <- t(rev.ENij)
cumsum.ENij <- cumsum(data.frame(t.rev.ENij))
t.ENij <- t(cumsum.ENij)
Finish <- rev(as.data.frame(t.ENij))
names(Finish) <- NULL#有什么用呢?
Finish.matrix <- data.matrix(Finish)
return(Finish.matrix)
}
注意:这个代码中names(Finish)<-NULL只是消除掉了数据框中名字,或许这一行是否删掉意义不大,后续如果我想明白了,会进行补充。