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
,以以下方式将forf(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