gpt4 book ai didi

r - 大循环卡在 R 中?

转载 作者:行者123 更新时间:2023-12-04 10:02:31 24 4
gpt4 key购买 nike

假设我想使用以下 function 执行模拟:

fn1 <- function(N) {
res <- c()
for (i in 1:N) {
x <- rnorm(2)
res <- c(res, x[2]-x[1])
}
res
}

对于非常大的 N ,计算似乎挂起。有没有更好的方法来做到这一点?

(灵感来源: https://stat.ethz.ch/pipermail/r-help/2008-February/155591.html)

最佳答案

通过使用应用函数,可以在 R 中极大地提高循环的效率,这些函数本质上是一次处理整个数据向量,而不是遍历它们。对于上面显示的循环,每次迭代期间都会发生两个基本操作:

# A vector of two random numbers is generated
x <- rnorm( 2 )

# The difference between those numbers is calculated
x[2] - x[1]

在这种情况下,适当的函数是 sapply() . sapply()对对象列表进行操作,例如循环语句生成的向量 1:N并返回结果向量:
sapply( 1:N, function( i ){ x <- rnorm(2); return( x[2] - x[1] ) } )

注意索引值 i在函数调用期间可用,并连续采用 1 之间的值和 N ,但是在这种情况下不需要。

养成识别位置的习惯 apply可以用过 for是一项非常有值(value)的技能——许多用于并行计算的 R 库通过 apply 提供即插即用的并行化。职能。使用 apply通常可以通过 在多核系统上获得显着的性能提升。零 代码重构。

关于r - 大循环卡在 R 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com