2017-07-06 4 views
2

私はこれらの行列を持っています。lapplyのような行列で0のNAsを設定するとうまくいかないのですか?

matr <- list() 

matr[[i]] <- c(0, NA, 3, 4, 4, 
      0, 0, 3, 4, 1, 
      0, 0, 0, NA, 1, 
      0, 0, NA, 0, 3, 
      0, 0, 0, 0, 0) 
matr[[i]] <- matrix(matr[[i]], 5, 5) 

私は、次のコードを使用してゼロにNAを設定したい:それは行列を返さないのはなぜ

> x 
[[1]] 
numeric(0) 

[[2]] 
numeric(0) 

[[3]] 
numeric(0) 

:その後、私はこのような結果を得た

x <- lapply(matr,function(x) x[is.na(x) <- 0]) 

を?私のコードは正しいですか?助けてください?

+2

'MATRを[is.na(MATR)] < - 0 '(lapply'、' lapply(MATR、関数 'でそれを –

+4

を行う必要がありますx){x [is.na(x)] < - 0; x}) 'である。 – lmo

+3

@ lmoの回答はうまくいきます。これは最初の正解とみなされるべきである。 –

答えて

2

lapplyはリストと返品リストに適用されるので、あなたが望むものではないと思います。 ここではapplyを使用すると良いと思います。

x <- apply(matr[[1]], 2, function(x){ x[is.na(x)] <- 0 x })

ここ数2を使用すると、列単位の代わりに、行方向(第一マージンが行であり、第二マージンは列です)で動作することを示してみます。

また、<-演算子を間違ったsintaxだった角括弧の中に入れたことにも注意してください。

編集:

私はあなたの質問に誤解しているようです。ここ は、リスト全体のために働くのコードを、次のとおりです。

lapply(matr, function(x){ apply(x, 2, function(y){ y[is.na(y)] <- 0 y }) })

関連する問題