是否可以在R中矢量化矢量元素的顺序更新?

kay*_*oll 4 r vectorization

是否可以像以下一样对代码进行矢量化?

length(x) <- 100;
x[1]      <- 1;
y         <- rnorm(100);

for(i in 2:100) {
    x[i] <- 2 * y[i] * x[i-1];
}
Run Code Online (Sandbox Code Playgroud)

我很欣赏这是一个微不足道的例子,但它有助于说明这个想法.

我经常需要编写代码,其中向量中的第i个值取决于第(i-1)个值,如果可能的话,我想写这个而不需要for循环,因为分析建议使用这种类型的函数操作是我的代码中的主要瓶颈.

这个操作是否可以向量化,所以我不需要for()在计算中使用循环?

had*_*ley 10

通常,如果您需要矢量化解决方案,则需要解决递归关系.

  • 感谢您的链接+1.我用有限的数学努力将维基百科的页面信息转化为解决OP问题的东西.如果它没有太多参与,你能否扩展你的答案,建议一种方法直接解决OP的问题? (2认同)

Sam*_*eer 5

在示例中,您可以计算x [i]的公式并查看它是否可以进行矢量化.在这种情况下,我认为cumprod可能会起作用.

x <- c(1, cumprod(2*y)[1:99])
Run Code Online (Sandbox Code Playgroud)

对于某些情况,您也可以filter在卷积或递归模式下使用该命令.看到?filter

但是,如果无法计算出适合上述模具之一的第n个值的公式,您可以尝试使用类似的软件包inlineRcpp在C/C++中循环编写.