用循环填充矩阵 [英] Fill matrix with loop

查看:8
本文介绍了用循环填充矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用循环创建nkk个MVN协变量的矩阵。 很简单,但到目前为止还不起作用。以下是我的代码:

n=1000
k=5
p=100
mu=0
sigma=1
x=matrix(data=NA, nrow=n, ncol=k)


for (i in 1:k){
        x [[i]]= mvrnorm(n,mu,sigma)
       }

缺少什么?

推荐答案

我在这里看到以下几点:

  1. 您可能希望设置随机种子以实现可复制性(set.seed(20430))。这意味着每次运行代码时,您将得到完全相同的伪随机变量集。
  2. 接下来,您的数据将只是独立变量;它们实际上不会有任何多变量结构(尽管这可能是您想要的)。一般来说,如果您想要生成多变量数据,您应该使用MASS包中的?mvrnorm。(有关详细信息,请参阅here。)
  3. 作为次要问题,如果您想要标准正常数据,则不需要指定mu = 0sigma = 1,因为它们是rnorm()的默认值。
  4. 您不需要循环来填充R中的矩阵,只需生成任意数量的值并使用matrix()函数中的data=参数直接将它们相加即可。如果您真的致力于使用循环,那么您可能应该使用双循环,这样您就可以循环遍历列,并且在每个循环中循环遍历行。(请注意,这是用R编写代码的一种非常低效的方式--尽管我一直在做这样的事情;-)。
  5. 最后,我不知道p应该在您的代码中做什么。

这里有一个基本方法,可以实现您想要的目标:

set.seed(20430)
n   = 1000
k   = 5
dat = rnorm(n*k)
x   = matrix(data=dat, nrow=n, ncol=k)

如果您真的想使用循环,可以这样做:

mu    = 0
sigma = 1
x     = matrix(data=NA, nrow=n, ncol=k)

for(j in 1:k){
   for(i in 1:n){
        x[i,j] = rnorm(1, mu, sigma)
   }
}

这篇关于用循环填充矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆