R 将位置和总和更改为新的数字系列

R 将位置和总和更改为新的数字系列,r,R,我使用了一个简单且可复制的示例: 我有一个函数f f <- function(x){ e <- seq(1, x, by = (sqrt(x))) e } 我想创建一个系列N,以以下方式将forf(1)到f(4)的每个输出相加(每次更改位置+1): 正如你所看到的,每一个的长度可能是不同的 有什么帮助吗?您可以通过sapply来实现这一点: sapply(1:4, function(i) sum(f(i))) sapply将向量1:4作为输入。然后我创建了

我使用了一个简单且可复制的示例:

我有一个函数
f

f <- function(x){
    e <- seq(1, x, by = (sqrt(x)))
    e    
}
我想创建一个系列
N
,以以下方式将for
f(1)
f(4)
的每个输出相加(每次更改位置+1):

正如你所看到的,每一个的长度可能是不同的


有什么帮助吗?

您可以通过
sapply
来实现这一点:

sapply(1:4, function(i) sum(f(i)))
sapply
将向量1:4作为输入。然后我创建了一个一次性的“lambda”函数,该函数将每个元素取1:4,并对
f
函数的输出求和


如果要对该输出求和,可以将其包装在
sum
cumsum
中进行累积求和。

可以使用
*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

N1是否希望输出为矩阵?这是一个累积的总数吗?
sapply(1:4, function(i) sum(f(i)))
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