我必须创建一个函数,它接受一个数字向量作为参数,并将其累加和作为长度相等的向量返回。
我已经想了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