创建一个函数返回累积矢量之和,不使用cumsum在r .



我必须创建一个函数,它接受一个数字向量作为参数,并将其累加和作为长度相等的向量返回。

我已经想了5个多小时了,但是我就是做不到。请注意,我是新来r的,请帮帮我。

我的尝试到目前为止,没有成功:

y <- function(x) {
for (i in x) {

print(sum(x[1]:x[i]):sum(x[1]:x[i]))
}
}

也试过

y <- function(x) {
for (i in x) {

print(x[1]:sum(x[1]:x[i]))
}
}

一个好的实践可能是使用递归(尽管它是低效的)

csum <- function(x) {
if (length(x) == 1) {
return(x)
}
v <- Recall(head(x, -1))
c(v, tail(v, 1) + tail(x, 1))
}

或者使用for循环的更有效的方法

csum <- function(x) {
if (length(x)==1) return(x)
for (i in 2:length(x)) {
x[i] <- sum(x[(i - 1):i])
}
x
}

或使用lower.tri+tcrossprod

cumsum <- function(x) c(tcrossprod(lower.tri(diag(x), diag = TRUE), t(x)))

,

> csum(1:10)
[1]  1  3  6 10 15 21 28 36 45 55

最新更新