我使用一个简单且可复制的例子:
我有一个函数f
f <- function(x){
e <- seq(1, x, by = (sqrt(x)))
e
}
例如:
> f(1)
[1] 1
> f(2)
[1] 1
> f(3)
[1] 1.000000 2.732051
> f(4)
[1] 1 3
> f(5)
[1] 1.000000 3.236068
我想创建一个系列N
,按以下方式将f(1)
到f(4)
的每个输出相加(每次更改位置+1):
# f(1)= 1
# f(2)= 1
# f(3)= 1.000000 2.732051
# f(4)= 1 3
# f(4)= 1.000000 3.236068
# N = 1 1 1.000000 3.732051 4.000000 3.236068 etc...
如您所见,每个人的长度可能不同。
任何帮助?
答案 0 :(得分:2)
您可以使用sapply
完成此操作:
sapply(1:4, function(i) sum(f(i)))
sapply
将向量1:4作为输入。然后,我创建了一个抛弃“lambda”函数,它将每个元素取为1:4,并对f
函数的输出求和。
如果您想对此输出求和,可以将其包含在sum
或cumsum
中以进行累加求和。
答案 1 :(得分:1)
您可以使用*apply
将您的功能应用于该系列,但总而言之,您需要在之前和之后插入零。您可以使用rowSums
获取实际金额:
N1 <- sapply(1:5,
function(x){
c(rep(0, x - 1), # insert zeros before
f(x),
rep(0, 6 - (length(f(x)) + x - 1))) # insert zeros after
})
N1
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 0 0.000000 0 0.000000
# [2,] 0 1 0.000000 0 0.000000
# [3,] 0 0 1.000000 0 0.000000
# [4,] 0 0 2.732051 1 0.000000
# [5,] 0 0 0.000000 3 1.000000
# [6,] 0 0 0.000000 0 3.236068
N2 <- rowSums(N1)
N2
# [1] 1.000000 1.000000 1.000000 3.732051 4.000000 3.236068