2016-03-24 19 views
5

私は単純な問題がありますが、簡単な答えは見つけられません。 「(別のリストの順序に従って:私は、私は(「A」、「ランダム」と「リスト」ここで)リストの要素の順序を変更したいかのリスト並べ替えの要素リスト

my.list=list(a=c(1,2,3),random=1,list=matrix(1:10,nrow=2)) 

の以下の種類があります」、 'リスト'、 '' ランダム)、またはので、リスト名のベクトル:名前(my.other.list):

my.other.list=list(a=c(4,5,6),list=matrix(101:110,nrow=2),random=2) 

ので目標は、このリストを得ることである:

my.wanted.list=list(a=c(1,2,3),list=matrix(1:10,nrow=2),random=1) 

list(my.listとmy.other.list)の両方に同じリスト名があります。アルファベット順にソートすることはできません。

私はこのループ作成:

my.wanted.list=list() 
for(i in 1:length(my.list)){ 
    my.wanted.list[[i]]=my.list[[names(my.other.list)[i]]] 
} 
names(my.wanted.list)=names(my.other.list) 

をしかし、それは一見単純な問題の解決策を時間のかかるように思えます。特にリストが大きい場合。それで、これを行う簡単な方法がありますか?

ありがとうございます。

+5

「my.list [names(my.other.list)]」とはどういう意味ですか? –

答えて

10

これを行うには、単にlistという名前のサブセット設定メカニズムを使用します。任意のpakageなし

my.list=list(a=c(1,2,3),random=1,list=matrix(1:10,nrow=2)) 

my.other.list=list(a=c(4,5,6),list=matrix(101:110,nrow=2),random=2) 

my.list[names(my.other.list)] 
#> $a 
#> [1] 1 2 3 
#> 
#> $list 
#>  [,1] [,2] [,3] [,4] [,5] 
#> [1,] 1 3 5 7 9 
#> [2,] 2 4 6 8 10 
#> 
#> $random 
#> [1] 1 

またはあなたはそれはあなたがサブセット化のために使用する名前ベクトルの順序であなたの最初のリストをreoder rlist

my.list %>% 
    list.subset(names(my.other.list)) 
#> $a 
#> [1] 1 2 3 
#> 
#> $list 
#>  [,1] [,2] [,3] [,4] [,5] 
#> [1,] 1 3 5 7 9 
#> [2,] 2 4 6 8 10 
#> 
#> $random 
#> [1] 1 

としてパッケージを使用することができます。

関連する問題