6

我正在尝试使用循环使用 mvn 协变量来创建矩阵n。很简单,但到目前为止还没有工作......这是我的代码:kk

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)
       }

少了什么东西?

4

3 回答 3

14

我在这里看到几件事:

  1. 您可能需要设置可复制性的随机种子 ( set.seed(20430))。这意味着每次运行代码时,都会得到完全相同的一组伪随机变量。
  2. 接下来,您的数据将只是独立变量;它们实际上不会有任何多元结构(尽管这可能是您想要的)。一般来说,如果你想生成多变量数据,你应该使用MASS包中的?mvrnorm 。(有关更多信息,请参见此处。)
  3. 作为一个小点,如果你想要标准的正常数据,你不需要指定mu = 0and sigma = 1,因为它们是rnorm().
  4. 您不需要循环来填充 R 中的矩阵,只需生成任意数量的值并使用data=函数中的参数直接添加它们matrix()。如果您真的致力于使用循环,您可能应该使用双循环,以便您循环遍历列,并在每个循环中循环遍历行。(请注意,这是在 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)
   }
}
于 2013-02-04T01:00:13.663 回答
3

先定义矩阵

E<-matrix(data=0, nrow=10, ncol=10);

运行两个循环来迭代 i 的行和 j 的列,我的是一个可交换的相关结构

for (i in 1:10)
{ 
  for (j in 1:10) 
  {
    if (i==j) {E[i,j]=1}
    else {E[i,j]=0.6}
  }
};
于 2018-09-29T03:03:02.427 回答
1
A=c(2,3,4,5);# In your case row terms
B=c(3,4,5,6);# In your case column terms
x=matrix(,nrow = length(A), ncol = length(B));
for (i in 1:length(A)){
     for (j in 1:length(B)){
          x[i,j]<-(A[i]*B[j])# do the similarity function, simi(A[i],B[j])       
     }
}
x # matrix is filled

我从我的问题的角度思考。

于 2015-04-04T19:16:39.317 回答