Schleifen parallelisieren in R mit foreach

preview_player
Показать описание
Schleifen haben einen schlechten Ruf in R: Sie gelten nicht zu unrecht als langsam. Oft ist es möglich, Schleifen zu vermeiden, etwa durch vektorisierte Funktionen, mit Funktionen aus der apply-Familie (wie lapply) oder mit map-Funktionen aus dem purrr-Paket.

Manchmal wäre es jedoch recht aufwändig, R-Code so umzuschreiben, dass Schleifen eliminiert werden. Dann ist es nützlich, ein Werkzeug im Werkzeugkoffer zu haben, das die Schleifen zwar behält, aber durch Parallelisierung beschleunigt. Das foreach-Paket von Michelle Wallig und Steve Weston bietet genau das.

Unser Ziel ist es, 200 Regressionsmodelle mit je einem anderen Prädiktor zu erstellen. Wir beginnen mit einer for-Schleife, wie man sie aus Base R kennt, und vergleichen sie mit dem foreach-Konstrukt. foreach erweist sich als komfortabler, da es sich automatisch um ein Rückgabeobjekt kümmert: Eine Liste. In Base R muss ich das explizit in meine Funktion einbauen.

Benchmarks mit der mark-Funktion aus dem bench-Paket zeigen, dass die Parallelisierung sich lohnt und deutlich schneller läuft als die beiden sequentiellen Varianten. Der clusterApply-Ansatz, den ich in einem anderen Video (siehe unten) ausführlicher darstelle, ist allerdings noch etwas schneller als die parallelisierte foreach-Schleife.

Nicht alle Schleifen sind für Parallelisierung geeignet. Schwierig wird es, wenn ein Schleifendurchlauf auf den Ergebnissen des vorherigen Durchlaufs aufbaut, was oft bei Simulationen der Fall sein kann. Hier gehen wir davon aus, dass jede Iteration unabhängig von den anderen läuft.

R-Code:

Thumbnail image: Chait Goli from Pexels

Statistiken zu Musik-Charts:
Рекомендации по теме
Комментарии
Автор

Neu und besser: Adapter %dofuture% statt %dopar%
Dank an Henrik Bengtsson

StatistikinDD