用于同时更新 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?提前致谢!
您可以执行以下操作。 <<-
运算符将在函数
之外设置 X
和 P
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。
我是 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?提前致谢!
您可以执行以下操作。 <<-
运算符将在函数
X
和 P
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。