0

以下のようなマトリックスを生成するために、Rで簡単なコードを作成しようとしています..

私はあなたが次のようなものを始めることを知っています:

 for(i in 1:10){

しかし、ここからどこへ行くべきかわかりません。私はただ使用できることを知っていますが、ステートメントouter(1:10,1:10)を使用しようとしています。for() do()

    1   2   3   4   5   6   7   8   9   10
 1  1   2   3   4   5   6   7   8   9   10  
 2  2   4   6   8   10  12  14  16  18  20  
 3  3   6   9   12  15  18  21  24  27  30  
 4  4   8   12  16  20  24  28  32  36  40  
 5  5   10  15  20  25  30  35  40  45  50  
 6  6   12  18  24  30  36  42  48  54  60  
 7  7   14  21  28  35  42  49  56  63  70  
 8  8   16  24  32  40  48  56  64  72  80  
 9  9   18  27  36  45  54  63  72  81  90 
 10 10  20  30  40  50  60  70  80  90 100  
4

3 に答える 3

1

私が説明するouterには、2つのループが必要です(少なくとも、実装したい場合はどうするか)

v <- c()
for(i in 1:10)
  for(j in 1:10)
    v <- c(v,i*j)      ## This is SLOW! (naughty)
matrix(v,ncol=10,nrow=10)

編集

私の最後の実装では、非常に遅いマトリックスのサイズを動的に割り当てます。次のように、ループの前に行列を割り当てることをお勧めします。

xx <- matrix(NA,ncol=10,nrow=10)
for(i in 1:10)
  for(j in 1:10)
    xx[i,j] <- i*j 

ベクトルを扱う別の方法:

I <- 1:10
J <- 1:10
I %*% t(J)
于 2013-01-20T13:34:33.170 に答える
1

outer免責事項:これは、より良いオプションであるため、ちょっとばかげたことです。楽しく教育的な目的のために:

#Define dimensions
matx <- 10
maty <- 10
mat <- matrix(NA, matx, maty)

#For loop
for(i in seq_len(maty)){
  mat[,i] <- i * seq_len(matx)
}

ループする前に行列のサイズを定義したことに注意してください。これにより、 R Infernoで説明されているオブジェクトの成長の恐怖を防ぐことができます。

于 2013-01-20T13:28:36.020 に答える
0

Another suggestion:

lines = 10
output= seq(from=1,by=1,length.out=columns)
i=2
while (i<lines+1){
  temp2 = seq(from=i, by=i, length.out=lines)
  output= cbind(output, temp2)
  i = i+1
}
于 2013-01-20T13:52:51.410 に答える