web-dev-qa-db-ja.com

行列をゼロ(0)で埋める方法

行列距離を0で埋める必要があります。これを行うにはどうすればよいですか?

distances <- matrix(1:25, nrow=5, ncol=5)
apply(distances, c(1, 2), function(x) 0)
26
Klausos Klausos

コメントに素敵な答えがたくさんあるので、ここに置いておきます

古いマトリックスの次元を使用して、まったく新しいマトリックスを作成できます。

_matrix(0L, nrow = dim(distances)[1], ncol = dim(distances)[2])  # @nrussell
_

または、同様に、いくつかのキーストロークを保存するには(matrixは2次元arrayの特殊なケースであるため)

_array(0L, dim(distances)) # @alexis_laz
_

または、_[]_を使用して古い行列の構造を保持し、ゼロで埋めることができます

_distances[] <- 0L # @Richard            
_

または、単にすべての値にゼロを掛けることができます

_distances*0L # @akrun
_

または、より一般的な解決策は、カウントNAのケースも取ります(ゼロの累乗のすべての数値は常に1に等しいため)

_distances^0L - 1L # @docendodiscimus
_

または私のもの:マトリックスをさまざまな方法で論理マトリックスに変換してから、ゼロを追加することもできます。例えば:

_is.na(distances) + 0L # if you don't have `NA` values in your matrix
_

あるいは単に

_(!distances) + 0L # if you don"t have zeroes in your matrix
_

マトリックスにゼロまたはNA値がある場合、row(distances)(またはcol(distances))は以下を行いません。

_is.na(row(distances)) + 0L
(!row(distances)) + 0L
_

また、_1_のマトリックスを生成し、_1_を減算する方法として、マトリックス全体をNA値にすることができます。

_is.na(distances + NA) - 1L
_

またはただの楽しみのために

_(distances == "Klausos Klausos") + 0L # if you don't have your name as one of the values
_

別の(少し厄介な)メソッドは_dim<-_を使用します

_`dim<-`(rep_len(0L, length(distances)), dim(distances))
_
39
David Arenburg

単純に入力できます

matrix( rep( 0, len=25), nrow = 5)

これは希望どおりに動作するはずです。

編集:小さなエラー(コメントを参照)を作成し、修正しました。

4
bonnaix