web-dev-qa-db-ja.com

行列をループで埋める

ループを使用してnmvn共変量を使用してkで行列kを作成しようとしています。非常に単純ですが、今のところ機能していません...これが私のコードです:

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
Marie

私はここにいくつかのことを見ます:

  1. 複製可能性のランダムシードを設定することをお勧めします(set.seed(20430))。これは、コードを実行するたびに、まったく同じ疑似乱数変量のセットを取得することを意味します。
  2. 次に、データは独立した変量になります。それらは実際には多変量構造を持ちません(それはあなたが望むかもしれませんが)。一般に、多変量データを生成する場合は、 ?mvrnorm[〜#〜] mass [〜#〜] パッケージ。 (詳細については、 こちら を参照してください。)
  3. マイナーな点として、標準正規データが必要な場合は、_mu = 0_および_sigma = 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)
   }
}
_
10
gung
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

私は自分の問題の観点から考えていました。

1
mparida

最初にマトリックスを定義する

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

2つのループを実行して、行の場合は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}
  }
};
0
user3197677