【问题标题】:In R, avoid for loop or apply or lapply在 R 中,避免 for 循环或应用或 lapply
【发布时间】:2016-03-18 04:30:16
【问题描述】:

在下面的代码中,对于矩阵Ma,将标准正态随机向量x1相乘,得到列和和最大值。通过重复这个过程 S=1000 次,我有兴趣找到 f2 的上 95% 分位数。由于高维矩阵,它花了很多时间,当我尝试 lapply 进行一些修改时,我收到一条关于内存分配的错误消息。有没有办法让这个模拟更快?提前致谢。

set.seed(1)
S=1000; n=1000; D=10000

Ma=matrix(rnorm(n*D),ncol=D)
f2<-NULL

for (i in 1:S){
x1=rnorm(n,0,1)
f1=colSums(Ma*x1)
f2[i]=max(f1)
}

q=quantile(f2,0.95)

【问题讨论】:

标签: r for-loop matrix apply lapply


【解决方案1】:

这个问题只是您上一个问题的一个小变化。以下是等价的。

set.seed(1)
S <- n <- 1000
D <- 10000

Ma <- matrix(rnorm(n*D),ncol=D)
x1 <- matrix(rnorm(n*S,0,1),ncol=S)
f1 <- crossprod(Ma,x1)
f2 <- apply(f1,2,max)
q <- quantile(f2,0.95)

【讨论】:

  • 太棒了。非常感谢。
猜你喜欢
  • 2015-08-22
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 2021-08-19
  • 2018-01-08
相关资源
最近更新 更多