在R中,避免循环或应用或lapply

时间:2016-03-18 04:30:17

标签: r for-loop matrix apply lapply

在下面的代码中,对于矩阵Ma,标准正态随机向量x1被乘以并且获得列和和最大值。通过重复这个过程S = 1000次,我感兴趣的是找到f2的上95%分位数。由于高维矩阵,它需要花费很多时间,当我尝试使用一些修改时,我得到了一个关于内存分配的错误消息。反正有没有让这个模拟更快?提前谢谢。

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)

1 个答案:

答案 0 :(得分:2)

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

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)