2016-06-15 13 views
2

Ich bin neu in R und versuche immer noch, mich um die Anwendungsfamilie zu kümmern, anstatt Schleifen zu verwenden.Eine Liste elementweise an Elemente einer verschachtelten Liste anhängen in R

Ich habe zwei Listen, ein verschachtelten, die andere nicht, die beiden Zeichen zusammengesetzt:

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

Ich mag eine dritte Liste erzeugen, so dass jedes Element der LST2 wird als das letzte Element der angehängten jeweilige Unterliste in lst1. Die gewünschte Ausgabe sieht wie folgt aus:

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

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

Meine Erfahrung bisher in R sagt mir, es ist wahrscheinlich eine Möglichkeit, dies zu tun, ohne eine Schleife explizit zu schreiben.

+1

ich tun würde 'mapply (c, lst1, lst2, SIMPLIFY = F)', aber das ist wahrscheinlich nicht was du suchst ("no loop")? – lukeA

+0

Funktioniert perfekt. Vielen Dank! –

Antwort

4

Sie können Map verwenden, die genau das tut, was tun mapply(..., simplify = F):

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

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

Prägnant. Vielen Dank! –

0

lapply wird nicht tun, was Sie brauchen. Sie können eine Schleife mit append, dies zu tun:

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]) 
} 

Ergebnisse:

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

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

Das funktioniert, aber ich wollte vermeiden, eine Schleife zu schreiben. –

1

Sie können auf jeden Fall lapply verwenden, wenn Sie Ihre Funktion über die Länge Ihres lst1 Vektor anzuwenden. Dies funktioniert:

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

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

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

Funktioniert gut. Danke für den Vorschlag. –