Verwenden der %% Pipe und Punkt (.) Notation

10

Bei Verwendung von map auf einem verschachtelten data_frame verstehe ich nicht, warum die letzten beiden Versionen einen Fehler ergeben. Wie sollte ich den Punkt ( . ) verwenden?

%Vor%     
johannes 22.02.2017, 07:19
quelle

1 Antwort

8

Das Problem ist nicht map , sondern wie die %>% pipe die . behandelt. Betrachten Sie die folgenden Beispiele (denken Sie daran, dass / eine Zwei-Argument-Funktion in R ist):

Einfache Verrohrung:

%Vor%

Entspricht '/'(1, 2) oder 1 / 2 und ergibt 0.5 .

Einfach . verwenden:

%Vor%

Entspricht '/'(2, 1) oder 2 / 1 und ergibt 2 .

Sie können sehen, dass 1 nicht mehr als erstes, sondern nur als zweites Argument verwendet wird.

Andere . verwenden:

Dieses funktioniert jedoch nicht , wenn Sie die . :

unterteilen %Vor%
%Vor%

Wir können sehen, dass . zweimal als erstes Argument und als Teilmenge im zweiten Argument injiziert wurde. Ein Ausdruck wie .$a wird manchmal als geschachtelter Funktionsaufruf bezeichnet (die Funktion $ wird in der Funktion / in diesem Fall verwendet).

Wir verwenden Klammern, um die Injektion erster Argumente zu vermeiden:

%Vor%

Gibt 0,5 wieder.

Tatsächliches Problem:

Sie rufen tatsächlich map(df, df$data, min) , nicht map(df$data, min) .

auf

Lösung:

Verwenden Sie geschweifte Klammern:

%Vor%

Siehe auch den Header Den Punkt für sekundäre Zwecke verwenden in ?magrittr::'%>%' , der lautet:

  

Insbesondere, wenn der Platzhalter nur in einer verschachtelten Funktion verwendet wird   Call, Lhs wird auch als erstes Argument platziert werden! Der Grund für   In den meisten Anwendungsfällen erzeugt dies den am besten lesbaren Code.   Zum Beispiel ist iris %>% subset(1:nrow(.) %% 2 == 0) äquivalent zu    iris %>% subset(., 1:nrow(.) %% 2 == 0) , aber etwas kompakter. Es   ist es möglich, dieses Verhalten zu übersteuern, indem Sie die rhs in geschweiften Klammern einschließen.   Zum Beispiel ist 1:10 %>% {c(min(.), max(.))} äquivalent zu    c(min(1:10), max(1:10)) .

    
Axeman 22.02.2017, 09:01
quelle

Tags und Links