2016-01-12 4 views
5

Wie extrahiere ich Elemente aus einer verschachtelten Liste nur mit dem Paket purrr? In diesem Fall möchte ich nach dem Aufteilen eines Datenrahmens einen Vektor von Abschnitten erhalten. Ich habe erreicht, was ich brauche mit lapply(), aber ich möchte nur Funktionen purrr Paket verwenden.Extrahieren Sie Elemente aus der verschachtelten Liste nur mit Funktionen aus dem Paket purrr

Ich habe versucht map() und at_depth() aber nichts schien für mich zu arbeiten.

+0

Wie hast du 'map' versucht? Wenn Sie den Funktionsnamen 'lapply' löschen und ihn durch' map' ersetzen - genau die gleichen Argumente - funktioniert es gut. – Gregor

+1

Ich fand die Hilfeseite für 'map' hier nützlich. Es sieht so aus, als könnten Sie im Gegensatz zu 'lapply' eine Abkürzung programmieren. Wie 'map_dbl (c (1, 1))' zum Indizieren geschachtelter Listen. – aosmith

+0

@Gregor. Aaaargh! Das ist einfach zu offensichtlich. Danke – hackR

Antwort

12

Die map Funktionen verfügen über eine Kurzschrift für die Indizierung von verschachtelten Listen. Ein hilfreiches Codefragment von der Hilfeseite:

Um tief in eine verschachtelte Liste zu indizieren, verwenden Sie mehrere Werte. c ("x", "y") entspricht z [["x"]] [["y"]].

Also für verschachtelten Indizes unter Verwendung von Code zusammen mit map_dbl, die auf einen Vektor reduziert, können Sie einfach tun:

mtcars %>% 
    split(.$cyl) %>% 
    map(~lm(mpg ~ wt, data = .)) %>% 
    map_dbl(c(1, 1)) 

     4  6  8 
39.57120 28.40884 23.86803 

Ich fand auch diese blog post purrr 0.1.0 nützliche Einführung, da es eine gab ein paar mehr Beispiele für die Kurzschrift, die ich benutzt habe.

+0

Perfekt. Dies ist die beste Antwort für mich, da diese Vektoren nicht mit Namen als Attribute ausgegeben werden. Prost! – hackR

Verwandte Themen