2017-08-28 10 views
1

行列のリストを行名でサブセット化しようとしています。R - rownameによる行列リストのサブセット

mtx1 <- matrix(data = c(1:12), nrow = 4) 
mtx2 <- matrix(data = c(13:24), nrow = 4) 

row.names(mtx1) <- c("A", "B", "C", "D") 
row.names(mtx2) <- c("A", "B", "C", "D") 

my_list <- c("B", "D") 

mtx_list <- list(mtx1, mtx2) 

これまでのところ、私は私が...

[[1]] 
    [,1] [,2] [,3] 
B 2 6 10 
D 4 8 12 

[[2]] 
    [,1] [,2] [,3] 
B 14 18 22 
D 16 20 24 

を得るだろうと思ったが、私は代わりに、行列の空のセットを受け取る...

sub_mtx_list 
[[1]] 
    [,1] [,2] [,3] 

[[2]] 
    [,1] [,2] [,3] 

sub_mtx_list <- lapply(mtx_list, subset, row.names(mtx_list) %in% my_list) 

を試してみました

ご協力いただければ幸いです!

+4

'lapply(mtx_list、function(x)x [row.names(%)%my_list、])' –

+0

'?subset'を読み込みます。これは対話的に使用するための便利な機能です。プログラミングの場合、[[、特に引数サブセットの非標準的な評価は予期しない結果をもたらす可能性がある]のような標準的なサブセット化関数を使用する方が良いです。 – Frank

答えて

1

あなたはこのコードを使用して期待するもの得ることができるようにするには、次の

lapply(mtx_list,function(x) x[row.names(x)%in%c("B","D"),]) 
[[1]] 
    [,1] [,2] [,3]  
    B 2 6 10 
    D 4 8 12 

[[2]] 
    [,1] [,2] [,3] 
B 14 18 22 
D 16 20 24 
1

subsetを使用する必要はありません、あなたが直接インデックスを使用することができます。

あなたに所望の出力を提供します
lapply(mtx_list, function(mat)mat[my_list,]) 

[[1]] 
    [,1] [,2] [,3] 
B 2 6 10 
D 4 8 12 

[[2]] 
    [,1] [,2] [,3] 
B 14 18 22 
D 16 20 24 
関連する問題