3

2 つのベクトルがあり、要素がベクトル 1 の各要素とベクトル 2 の各要素の合計である行列が必要です。

たとえば、この行列の最初の行の最初の要素は、ベクトル 1 の最初の要素とベクトル 2 の最初の要素の和です。最初の行の 2 番目の要素は、ベクトル 1 の最初の要素とベクトル 2 の 2 番目の要素の合計です。

たとえば、これらの 2 つのベクトルで

u <- c(1,2,3)
v <- c(4,5,6)

望ましい結果は次のようになります。

#       [,1] [,2] [,3]
# [1,]    5    6    7
# [2,]    6    7    8
# [3,]    7    8    9

私が試したこと:

A <- matrix( c(1:6), 3, 3 )

for(i in 1:3)
{
   for(j in 1:3)
   {
      A[j][i] <- u[i]+v[j]
   }
}

しかし、いくつかの警告が表示されます:

Warning messages:
1: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
2: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
3: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
4: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
5: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
6: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length

誰でも私を助けることができますか?

4

2 に答える 2

7

これはあなたがそれを行う方法です(マトリックスサブセットは2つの括弧ではなく、カンマで区切られていることに注意してください):

u <- c(1,2,3)
v <- c(4,5,6)

A <- matrix( c(1:6), 3, 3 )

for(i in 1:3)
{
   for(j in 1:3)
   {
      A[i,j] <- u[i]+v[j]
   }
}

しかし、これは R を知っている人がアプローチする方法ではありません。一般に、ネストされた for ループよりも R で物事を行うためのより良い方法があります。別の方法は次のとおりです。

A <- outer(u,v,`+`)
于 2012-09-13T13:48:02.637 に答える