使用带有矩阵的For循环优化R代码

时间:2019-01-14 22:03:39

标签: r for-loop

我需要使用for循环将以下代码转换为一个,最简单的方法是什么?

set.seed(123)
iter <- 1000
s1 <- 2
mat1 <- matrix(data = rcauchy(iter*s1,0,1),nrow = iter,ncol = s1)
sets1 <- apply(mat1,1,median)
hist(sets1)

s2 <- 5
mat2 <- matrix(data = rcauchy(iter*s2,0,1),nrow = iter,ncol = s2)
sets2 <- apply(mat2,1,median)
hist(sets2)

s3 <- 10
mat3 <- matrix(data = rcauchy(iter*s3,0,1),nrow = iter,ncol = s3)
sets3 <- apply(mat3,1,median)
hist(sets3)

s4 <-20
mat4 <- matrix(data = rcauchy(iter*s4,0,1),nrow = iter,ncol = s4)
sets4 <- apply(mat4,1,median)
hist(sets4)

我尝试了以下操作:

set.seed(1234)
iter <- 1000
size <- c(2,5,10,20)
for(i in 2:size){
  for (j in 1:iter){
     mat[] <- matrix(data = rcauchy(i*j,0,1),nrow=iter,ncol=i)
     s <- apply(mat,1,median)
     hist(s)
}
}

但是它不起作用,请帮助

1 个答案:

答案 0 :(得分:1)

简便的方法是将矩阵的创建包装到lapply函数中。

set.seed(123)
iter <- 1000
size <- c(2,5,10,20)

returnmatrix<-lapply(size, function(i){
  mat<-matrix(data = rcauchy(i*iter,0,1),nrow=iter,ncol=i)
  s <- apply(mat,1,median)
  hist(s, main=paste("Histogram when S=", i))
  mat
})

lapply函数将绘制直方图,并在需要其他处理时将矩阵作为列表返回。