我有一个向量,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是非常强大和高效的。但是,对于您的几何案例而言,这可能是过大的了。