2017-07-04 5 views
1

zurückgegeben werden. Sagen wir, ich möchte eine Liste von vier Listen erstellen. Die ersten beiden sind manuell definiert, die zweiten beiden sind das Ergebnis von lapply. So spezifisch sein, ich habe diese drei Elemente:Eine besser lesbare Möglichkeit, einige Listen mit einigen Listen zu verbinden, die von lapply in R

> list("a" = 1) 
> list("b" = 1) 
> lapply(1:2,FUN=function(i) { list("c"=i) } 

Und ich möchte, dass sie kombinieren, so dass die Ausgabeliste ist:

[[1]] 
[[1]]$a 
[1] 1 


[[2]] 
[[2]]$b 
[1] 1 


[[3]] 
[[3]]$c 
[1] 1 


[[4]] 
[[4]]$c 
[1] 2 

ich es erreichen kann, mit dem folgenden:

> unlist(recursive=FALSE, 
     list(
       list(list("a"=1),list("b"=1)), 
       lapply(1:2,FUN = function(i) { list("c"=i) }) 
      ) 
     ) 

Aber all diese Listen von Listen von Listen Geschäft scheint ein bisschen ausführlich! Ich weiß, dass ich natürlich einfach eine Funktion schreiben kann, aber ich frage mich, ob es einen saubereren Liner gibt?

Antwort

3
c(list(list("a" = 1),list("b" = 1)),lapply(1:2,FUN=function(i) { list("c"=i) })) 
0

Wenn Sie zu, dass ich Einwände „Listen von Listen von Listen Geschäft scheint ein bisschen ausführliche“, Sie sind unglücklich, dass die Ausgabe von Listen ausführlich ist, oder der Code von Listen ist die ausführliche?

Welche Teile können eine atomare Liste sein, und welche Teile müssen eine Liste bleiben? Behandeln beide Ihre Bedenken?

c(
    rep("a", 1), 
    rep("b", 1), 
    rep("c", 2) 
) 

rep(
    c("a", "b", "c"), 
    c(1 , 1 , 2) 
) 

Beide produzieren den atomaren Charakter Vektor:

[1] "a" "b" "c" "c" 
+0

Danke, aber leider muss ich die Ausgabe, die genaue Datenstruktur in der Frage, wie angegeben übereinstimmen (aus Gründen derzeit nicht in meiner Kontrolle). Mein Kommentar zum ausführlichen Geschäft betraf meine eigene Lösung, bei der ich nicht rekursiv eine Liste von Listen von Listen auflistte – Patrick

Verwandte Themen