2016-06-15 7 views
2

私はRの新人ですが、ループを使用する代わりに、適用ファミリの周りに頭を浮かべようとしています。リスト内でネストされたリストの要素にリストを追加する

私は二つのリスト、ネストされた1、他ではない、文字で構成される両方持っている:私はLST2の各要素がの最後の要素として追加されるような第三のリストを作成したいと思います

>lst1 <- list(c("ABC", "DEF", "GHI"), c("JKL", "MNO", "PQR")) 
>lst2 <- c("abc", "def") 

をlst1のそれぞれのサブリスト希望の出力は次のようになります:

>lst3 
[[1]] 
[1] "ABC" "DEF" "GHI" "abc" 

[[2]] 
[1] "JKL" "MNO" "PQR" "def" 

これまでのRの経験から、ループを明示的に記述することなくこれを行う方法があると私には分かります。

+1

私は 'mapply(C、LST1、LST2、簡素化= F)を'やると思いますが、これはおそらくですあなたが探しているもの(「ループなし」)ではありませんか? – lukeA

+0

完全に動作します。ありがとう! –

答えて

4

あなたはmapply(..., simplify = F)まさにんどのMapを使用することができます。

Map(c, lst1, lst2) 
[[1]] 
[1] "ABC" "DEF" "GHI" "abc" 

[[2]] 
[1] "JKL" "MNO" "PQR" "def" 
+0

簡潔です。ありがとう! –

0

lapplyは、必要な処理を行いません。これを行うにはappendでループを使用することができます。

list1 <- list(c("ABC","DEF","GHI"),c("JKL","MNO","PQR")) 
list2 <- c("abc","def") 

listcomplete <- list(c("ABC","DEF","GHI","abc"),c("JKL","MNO","PQR","def")) 

for (i in 1:length(list2)) { 
    list1[[i]] <- append(list1[[i]],list2[i]) 
} 

結果:

> list1 
[[1]] 
[1] "ABC" "DEF" "GHI" "abc" 

[[2]] 
[1] "JKL" "MNO" "PQR" "def" 
+0

これはうまくいきますが、私はループを書くことを避けたかったのです。 –

1

あなたlst1ベクトルの長さにわたって、あなたの関数を適用する場合は、間違いなくlapplyを使用することができます。これは動作します:

lapply(1:length(lst1),function(i) append(lst1[[i]],lst2[[i]])) 

[[1]] 
[1] "ABC" "DEF" "GHI" "abc" 

[[2]] 
[1] "JKL" "MNO" "PQR" "def" 
+0

素晴らしい作品です。提案していただきありがとうございます。 –

関連する問題