2017-10-22 6 views
2

私は2つの(偽と真の)下三角行列を持っています。私は選択した数字ですべての真の値を変換したいと思います。私はコードを書いたが動作しません。与えられた例は私の問題と非常に似ています(非常に複雑です)。ここでリストを下三角行列に変換できません

は私のコードです:ここでは

> Matrix 
[[1]] 
     [,1] [,2] [,3] [,4] [,5] 
[1,] FALSE FALSE FALSE FALSE FALSE 
[2,] TRUE FALSE FALSE FALSE FALSE 
[3,] TRUE TRUE FALSE FALSE FALSE 
[4,] TRUE TRUE TRUE FALSE FALSE 
[5,] TRUE TRUE TRUE TRUE FALSE 

[[2]] 
     [,1] [,2] [,3] [,4] [,5] 
[1,] FALSE FALSE FALSE FALSE FALSE 
[2,] TRUE FALSE FALSE FALSE FALSE 
[3,] TRUE TRUE FALSE FALSE FALSE 
[4,] TRUE TRUE TRUE FALSE FALSE 
[5,] TRUE TRUE TRUE TRUE FALSE 
np1 <- 10 
np2 <- 10 
np <-list(np1, np2) 

TRUE値の場所を取る必要がある数字です。

new <- list(c(1,2,3,4,5,6,7,8,9,10),c(1,2,3,4,5,6,7,8,9,10)) 

そうするために、私はこのコードを書いた:

new1 <- lapply(1:2, function(i) matrix(0, 5, 5)) 
new1 <- lapply(1:2, function(i){new1[[i]][Matrix[[i]]] <- new[[i]][1:np[[i]]]}) 
+0

'new1'で' lapply'を定義する方法は、それをベクトルとして保持し、なぜそれが行列に変換されないのかを示します。 –

答えて

3

は、以下のことを試してみてください。

new1 <- lapply(1:2, function(i) matrix(0, 5, 5)) 
new1 <- lapply(1:2, function(i){new1[[i]][Matrix[[i]]][] <- 1:np[[i]]; new1[[i]]}) 
new1 

あなたは5x5の行列 new1この場合には、対象物の大きさを保つために Rを強制的に空の []を逃しました。また、2番目の lapplyの無名関数は何かを返す必要があるので、おそらく以下の正確な同等のものが読みやすくなります。

new1 <- lapply(1:2, function(i){ 
      new1[[i]][Matrix[[i]]][] <- 1:np[[i]] # note the last [] 
      new1[[i]] 
     }) 
関連する問題