Neue native Nacheinanderausführungssyntax nutzen?

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
bigben
Beiträge: 2639
Registriert: Mi Okt 12, 2016 9:09 am

Neue native Nacheinanderausführungssyntax nutzen?

Beitrag von bigben »

Hallo,

mit R Version 4.1 ist die native Pipe als denkbare Konkurrenz zur magrittr Pipe eingeführt worden und ich frage mich, welchen Sinn die zweite Pipe hat und ob sie sich durchsetzen wird. Klar ist, sie funktioniert anders: "The simple form of the forward pipe inserts the left-hand side as the first argument in the right-hand side call."

Das kann man beispielsweise beim Benchmarking sehen:

Code: Alles auswählen

library(microbenchmark)
library(magrittr)
bm <- microbenchmark(
         1:500 |> sqrt(),
         1:500 %>% sqrt,
         times = 10000
      )
print(bm)
boxplot(bm)
gibt bei mir aus:

Code: Alles auswählen

> print(bm)
Unit: microseconds
           expr min  lq    mean median  uq    max neval
    sqrt(1:500) 3.5 4.0 6.56177    4.3 5.3 9544.4 10000
 1:500 %>% sqrt 5.7 6.3 9.56969    6.7 8.5 6211.7 10000
Man erkennt an der Ausgabe, dass die native Pipe vor der Evaluation durch microbenchmark angewendet wurde, während die magrittr Pipe jedes Mal neu evaluiert werden muss. Dementsprechend läuft die native Pipe dann auch um Nanosekunden schneller. Nagut, ich habe Schwierigkeiten mir vorzustellen, unter welchen Umständen das ausschlaggebend wäre. Der Geschwindigkeitsvorteil durch das Weglassen eines library Aufrufs ist da -wenn überhaupt- wahrscheinlich eher zu merken.

Die Dokumentationsseite zur Pipe schreibt "The forward pipe operator is motivated by the pipe introduced in the magrittr package, but is more streamlined. " Das wird Athomas gefallen, dass hier auf die Quelle des Gedankens verwiesen wird. Aber kann mir vielleicht jemand erklären, was streamlined in diesem Kontext heißt?

Der von jogo unter Aktuelles zum Thema verlinkte Blog schreibt über die native Pipe:
The new operator is nicer to type, and should be both more efficient and easier to debug, than the {magrittr} pipe.
Sieht jemand bessere Debugging Möglichkeiten? Ich gebe gerne zu, dass Debugging bei mir oft das Einfügen von print-Kommandos ist. Auf dem Niveau sehe ich die Vorteile nicht, aber ich könnte mir schon denken, dass bei der Verwendung von debug() entstehen?

Auf der Gegenseite der Waage hat magrittr einfach einen riesigen Popularitätsvorsprung. Zigtausende Blogs und Erklärungen im Netz, die es schon nutzen und dann noch den Punkt-Operator.

Wie seht Ihr das?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten