作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我想使用以下 function
执行模拟:
fn1 <- function(N) {
res <- c()
for (i in 1:N) {
x <- rnorm(2)
res <- c(res, x[2]-x[1])
}
res
}
N
,计算似乎挂起。有没有更好的方法来做到这一点?
最佳答案
通过使用应用函数,可以在 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/
我是一名优秀的程序员,十分优秀!