R类似于同时更新2个数组的功能吗?

时间:2016-08-19 05:15:18

标签: arrays r vector apply

我是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编码实践的任何提示/技巧?提前谢谢!

1 个答案:

答案 0 :(得分:1)

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

之外设置XP
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链接。