用于同时更新 2 个数组的 R apply-like 函数?

R apply-like function for updating 2 arrays simultaneously?

我是 R 的新手,正在寻找一个应用类型函数来同时处理 2 个数组(同时更新)。

例如,假设我有一些变量 X 和 P:

X = array(rep(0, 10), dim=c(10, 1))
P = array(rep(1, 10), dim=c(10, 1))

由方程组控制:

X[k,] = 2*X[k-1]
P[k,] = 3*X[k] + X[k-1] + 3

显然,这可以通过 for 循环轻松完成,但是,我 read/confirmed 我自己认为 for 循环对于大输入来说非常糟糕,我想开始良好的 R 编码实践,所以我想知道,在应用类型逻辑中执行此操作的最佳方法是什么?我正在寻找类似的东西,

sapply(2:dim(X)[1], function(k) {
    X[k,] = 2*X[k-1]
    P[k,] = 3*X[k] + X[k-1] + 3
})

但这显然行不通,因为它实际上并没有在内部更新 X 和 P。关于如何使我的 for 循环更快,并获得更好的 R 编码实践的任何 tips/tricks?提前致谢!

您可以执行以下操作。 <<- 运算符将在函数

之外设置 XP
sapply(2:dim(X)[1], function(k) {
    X[k,] <<- 2*X[k-1]
    P[k,] <<- 3*X[k] + X[k-1] + 3
})

正如 thelatemail 在评论中指出的那样,使用 <<- 可能会有问题,因为它可能会产生副作用。请参阅下面的 links,将 for 循环(和其他循环)与 apply 函数族进行比较。

这里是 link 文档 assignment operators in R.

这是 for loop vs. apply functions 上关于性能的 Whosebug link。