1

次の行列を変更したいとします。

a= matrix(c(
  1:20),ncol=5)
a
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

rvec= c(4,2)
cvec=c(1,5)
a[rvec,cvec] = c(200,500)
a
    [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]  500    6   10   14  500
[3,]    3    7   11   15   19
[4,]  200    8   12   16  200

でも私はしたい:

    [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14  500
[3,]    3    7   11   15   19
[4,]  200    8   12   16  20

ベクトルを値の位置と見なして、x,y (4,1) と x,y (2,5) を c(200,500)それぞれ in に変更します。

forループでそれを行うことができますが、遅すぎます。

 for(i in 1:length(c(200,500)))
 {
   a[rvec[i],cvec[i]] = c(200,500)[i]
 }

 a
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14  500
[3,]    3    7   11   15   19
[4,]  200    8   12   16   20
4

1 に答える 1

1
## Set up a matrix with row-indices in column 1 & column-indices in column 2 
ij <- rbind(c(4,1), c(2,5))

## Use it to pick out individual elements of a
a[ij] <- c(200, 500)

## Check that it worked
a
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    5    9   13   17
# [2,]    2    6   10   14  500
# [3,]    3    7   11   15   19
# [4,]  200    8   12   16   20

ちなみに、これは次のドキュメントに記載されてい?"["ます。

インデックス付けの 3 番目の形式は、各次元に 1 列の数値行列を使用するものです。インデックス行列の各行は配列の 1 つの要素を選択し、結果はベクトルになります。

于 2013-11-05T08:05:25.147 に答える