Mit der Version R.3.0.0 wurde R um wichtige Funktionen für den professionellen Einsatz erweitert. Dazu zählt beispielsweise die Erweiterung der Funktion Rprof(), mit der sich die  Performance von R-Skripten analysieren und optimieren lässt.

Schon zuvor war die Funktion Rprof() aus dem utils Paket ein nützliches Werkzeug um eine differenzierte Laufzeitanalyse von R-Skripten und Funktionen durchzuführen. Durch das sogenannte Profiling wird zu einer Funktion ein Profil generiert, welches Auskunft darüber gibt, wie viel Zeit für die darin enthaltenen Funktionsaufrufe verwendet werden. So lassen sich mögliche Flaschenhälse innerhalb der Funktion identifizieren und Optimierungen bezüglich der Laufzeit, an den entsprechenden Stellen durchführen.

Das erstellte Profil lässt sich mittels der Funktion summaryRprof() aufrufen. Vor allem bei sehr umfangreichen Funktionen oder beim Testen kompletter Skripte, kann der Output jedoch schnell sehr unübersichtlich werden. Ein Profiling aller Beispiele aus dem boot– Paket zeigt, dass die Ausgabe nicht sehr intuitiv ist, was eine genaue Analyse unter Umständen sehr erschweren kann.
(Das Skript boot.R welches die Beispiele enthält, finden Sie am Ende des Beitrags)

[embedit snippet=“example_prof“]

Output:
[embedit snippet=“output_prof“]

 

Es existieren bereits seit einiger Zeit weitere Pakete und Funktionen, die die Auswertung des erstellten Profils erleichtern sollen, wie zum Beispiel Hadely Wickam’s profr.
Eine wesentliche Verbesserung von Rprof() wurde jedoch erst kürzlich mit der neusten R Version 3.0.0 eingeführt:

  • Profiling via Rprof() now optionally records information at the statement level, not just the function level.

Durch die Argumente Rprof(… ,line.profiling = TRUE) und summaryRprof( … ,lines= „show“) ist es nun möglich die Laufzeitanalyse nach Zeilen des source– Skripts auszuwerten. So lässt sich auf den ersten Blick erkennen, an welchen Stellen im Code die meiste Zeit benötigt wird.

[embedit snippet=“example_prof_new“]

Output:
[embedit snippet=“output_prof_new“]

Eine intuitive Darstellung des Profils, welche die Hierarchie der Funktionsaufrufe mit dem neuen Feature verknüpft, liefert die Funktion proftable() von Noam Ross.

Beispiel-Skript
[embedit snippet=“example_boot“]