有没有办法压缩这段代码?
Is there a way to condense this code?
有没有办法像这样压缩代码?在这种情况下,B 只是一个列向量,而 A 只是一个标量值。我觉得好像 Q1 <- A*(1+B[1]) 行必须保持这样,然后其余代码可能会以更简洁的方式编写。
Q1 <- A*(1+B[1])
Q2 <- Q1*(1+B[2])
Q3 <- Q2*(1+B[3])
Q4 <- Q3*(1+B[4])
Q5 <- Q4*(1+B[5])
QCombo <- matrix(c(Q1,Q2,Q3,Q4,Q5))
如有任何帮助,我们将不胜感激。所需的结果将是一个列向量。
假设你的 A 和 B 看起来像这样
A <- 10
B <- 1:5
这看起来很好地使用了 Reduce
函数
Reduce(function(a,b) a*(1+b), B, init=A, accumulate=T)[-1]
# [1] 20 60 240 1200 7200
我们使用 [-1]
来 trim 关闭初始 A
值。如果确实需要,您可以将它们包装在 matrix()
调用中。
您可以尝试cumprod
(使用@MrFlick 的示例)
A*cumprod(B+1)
#[1] 20 60 240 1200 7200
有没有办法像这样压缩代码?在这种情况下,B 只是一个列向量,而 A 只是一个标量值。我觉得好像 Q1 <- A*(1+B[1]) 行必须保持这样,然后其余代码可能会以更简洁的方式编写。
Q1 <- A*(1+B[1])
Q2 <- Q1*(1+B[2])
Q3 <- Q2*(1+B[3])
Q4 <- Q3*(1+B[4])
Q5 <- Q4*(1+B[5])
QCombo <- matrix(c(Q1,Q2,Q3,Q4,Q5))
如有任何帮助,我们将不胜感激。所需的结果将是一个列向量。
假设你的 A 和 B 看起来像这样
A <- 10
B <- 1:5
这看起来很好地使用了 Reduce
函数
Reduce(function(a,b) a*(1+b), B, init=A, accumulate=T)[-1]
# [1] 20 60 240 1200 7200
我们使用 [-1]
来 trim 关闭初始 A
值。如果确实需要,您可以将它们包装在 matrix()
调用中。
您可以尝试cumprod
(使用@MrFlick 的示例)
A*cumprod(B+1)
#[1] 20 60 240 1200 7200