我有一个向量,a
并希望递归地乘以每个元素b
,而不使用循环.
a <- rep(0, 10)
a[1] <- 1
b <- 2
# with a loop
for (i in 2:length(a)) a[i] <- a[i-1] * b
Run Code Online (Sandbox Code Playgroud)
对于如何在不使用循环的情况下解决这个问题的提示,我将不胜感激.
通常,如果没有显式循环,则无法执行此操作.在这种特定情况下,您可以使用由cumprod
以下提供的隐式循环:
a <- rep(2, 10)
a[1] <- 1
cumprod(a)
# [1] 1 2 4 8 16 32 64 128 256 512
Run Code Online (Sandbox Code Playgroud)
对于形式的一般递归系列:
y[i] = x[i] + f[1]*y[i-1] + ... + f[p]*y[i-p]
Run Code Online (Sandbox Code Playgroud)
您可以使用该filter
功能。你的情况,你有x[i] = 0
,f[1] = 2
并f[i] = 0
为i > 1
。转换为:
filter(rep(0,10), 2, method="recursive", init=1/2)
# Time Series:
# Start = 1
# End = 10
# Frequency = 1
# [1] 1 2 4 8 16 32 64 128 256 512
Run Code Online (Sandbox Code Playgroud)
在学习如何使用它之后,这并不总是第一次,它filter
是非常强大和高效的。但是,对于您的几何案例而言,这可能是过大的了。