向量元素的递归操作

joh*_*nes 3 r

我有一个向量,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)

对于如何在不使用循环的情况下解决这个问题的提示,我将不胜感激.

Jos*_*ich 5

通常,如果没有显式循环,则无法执行此操作.在这种特定情况下,您可以使用由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)


flo*_*del 5

对于形式的一般递归系列:

y[i] = x[i] + f[1]*y[i-1] + ... + f[p]*y[i-p]
Run Code Online (Sandbox Code Playgroud)

您可以使用该filter功能。你的情况,你有x[i] = 0f[1] = 2f[i] = 0i > 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是非常强大和高效的。但是,对于您的几何案例而言,这可能是过大的了。