类似于应用程序的函数,用于同时更新2个数组



我是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编码实践,所以我想知道,什么是最好的方法来做到这一点在应用程序类型的逻辑?我在找类似

的东西
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编码实践,有什么建议/技巧吗?提前感谢!

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

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

正如最后一封邮件在评论中指出的那样,使用<<-可能是有问题的,因为它可能有副作用。请看下面的链接,比较for循环(和其他循环)和apply函数族。

这里是r中赋值操作符文档的链接。

这是一个关于for loop和apply函数的StackOverflow链接,讨论性能

最新更新