collapse - newest and fastest kid on the block?

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

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

collapse - newest and fastest kid on the block?

Beitrag von bigben »

Hallo,

ich habe ja in aller Regel nur kleine Datensätze und deshalb bleiben Diskussionen, ob nun tibbles oder data.tables schneller als data.frames sind, für mich uninteressant.

Dennoch hat ein Post auf der Platform-formerly-known-as-Twitter meine Neugierde geweckt:

https://twitter.com/f2harrell/status/17 ... 6184182900
collapse is a cool #rstats package. Operates at supersonic speed for computing aggregate statistics and more.
Einfach nur, weil ich dem Frank Harrell vertraue, dass er Ahnung hat und keinen Unsinn postet.
Eine von mehreren Vignetten findet man hier: https://sebkrantz.github.io/collapse/ar ... intro.html
Demnach sollen typische Datawrangling-Aufgaben damit sowohl auf Dataframes als auch auf tibbles als auch auf data.tables nochmal viel schneller ausgeführt werden können:
Another objective was to radically improve the speed of R code by extensively relying on efficient algorithms in C/C++ and the faster components of base R. collapse ranks among the fastest R packages, and performs many grouped and/or weighted computations noticeably faster than dplyr or data.table.
Das ist ja schonmal eine Ansage. Ein konkreter Claim:
fselect is an analogue to dplyr::select, but executes about 100x faster.
Schon mal die Idee gehabt, Durchschnittswerte nur aus den numerischen Spalten eines Dataframes berechnen zu wollen?
In addition to get_vars, collapse offers a set of functions to efficiently select and replace data by data type: num_vars, cat_vars (for categorical = non-numeric columns), char_vars, fact_vars, logi_vars and date_vars (for date and date-time columns).
Mein erster Eindruck (ohne mich wirklich vertieft zu haben) ist, dass die Funktionsnamen gut gewählt sind, z. B. finde ich folgendes viel verständlicher:
roworder is a fast analogue to dplyr::arrange.
Anscheinend hat collapse aber wie das tidyverse eine Tendenz, einem den Namespace voll zu cluttern:
The most frequently required among the functions introduced above can be abbreviated as follows: fselect -> slt, fsubset -> sbt, ftransform(v) -> tfm(v), settransform(v) -> settfm(v), get_vars -> gv, num_vars -> nv, add_vars -> av.
Sehr viele neue Funktionsnamen also (Übersicht hier: https://sebkrantz.github.io/collapse/re ... ation.html )
Ich weiß noch nicht, wie tief ich da einsteige. Geschwindigkeit ist, wie gesagt, nicht mein Thema. Dass man aber damit Code schreiben kann der für Dataframes, Matrizen, tibbles und data.tables gleich ist, finde ich erstmal sympathisch.

collapse ist umfangreich und schnell und wurde m. W. bisher im Forum nicht besprochen, deshalb wollte ich Euch einfach mal drauf hinweisen.

Viele Grüße,
Bernhard


PS: Der Autor erklärt sein Package hier in einem >2h Video: https://youtu.be/OwWT1-dSEts?si=lHMJPtCdbb_5sdYK
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
student
Beiträge: 675
Registriert: Fr Okt 07, 2016 9:52 am

Re: collapse - newest and fastest kid on the block?

Beitrag von student »

Hallo Bernhard,

bisher hatte ich bezüglich Datensatzgröße und Geschwindigkeit auch noch keine größere Herausforderungen, aber danke für den Hinweis! Ich werde mir die Möglichkeiten mal anschauen.
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
bigben
Beiträge: 2781
Registriert: Mi Okt 12, 2016 9:09 am

Re: collapse - newest and fastest kid on the block?

Beitrag von bigben »

Hallo Student,

na wer weiß. Du bist ja immer mehr mit dem Raspberry Pie unterwegs. Vielleicht wird da Recheneffizienz noch wichtiger :D

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