我是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循环很容易地实现,但是,我已经阅读/确认自己for循环对于大量输入工作非常糟糕,我想开始进入良好的R编码实践,所以我想知道,在apply-type逻辑中执行此操作的最佳方法是什么?我正在寻找类似的东西,
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编码实践的任何提示/技巧?提前谢谢!
答案 0 :(得分:1)
您可以执行以下操作。 <<-
运算符会在函数
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所指出的,使用<<-
可能会产生问题,因为它可能会产生副作用。请参阅下面的链接,将for
循环(和其他循环)与apply
函数系列进行比较。
以下是R中assignment operators文档的链接。
以下是for loop vs. apply functions上关于性能的StackOverflow链接。