Wer kennt es nicht: Ein bestimmter Report muss monatlich erstellt werden oder man führt aktuell eine Erhebung durch und möchte eine tägliche Information über die Rückläufe. Solche Aufgaben muss man nicht händisch durchführen, sondern kann diese mit R automatisieren. Wie dies in Windows geht, erkläre ich in diesem Blog-Beitrag.

Die Grundlage I: Report und E-Mail-Vorlage

Als Grundlage für die Automatisierung wird eine Datei benötigt, die einen Auswertungsreport erstellt. Dies kann in R eine R-Markdown– oder R-Quarto-Datei sein. Hier hat man die Möglichkeit den Report als HTML, PDF und Word-Datei zu speichern. Wie man reproduzierbare Reports mit R und Word erstellt, habe ich in diesem Blog-Beitrag bereits beschrieben. Soll der Report automatisiert immer wieder erstellt werden, ist es natürlich sinnvoll immer den aktuellen Datenbestand einzubinden. Idealerweise kann man dies über eine sog. API-Anbindung erreichen. In Online-Befragungssystemen wie Lamapoll und Limesurvey gibt es diese Möglichkeit. Eine Anleitung, wie man sich in R mit der Limesurvey-API verbinden kann, gibt es hier im Blog.

Möchte man den erstellten Report nicht nur unter einem bestimmten Dateipfad speichern, sondern auch gleich versenden, benötigt man noch eine E-Mail-Vorlage. Um E-Mails mit R zu verschicken, eignet sich das Paket blastula. Mit diesem kann man E-Mails in R erstellen und sie dann über R und einen Mailserver verschicken. Den zuvor erstellten Report kann man der E-Mail als Anhang beifügen. Auch ist es möglich Auswertungsinhalte (z. B. Tabellen oder Grafiken) direkt in die E-Mail zu integrieren, was sich beispielsweise bei Rücklaufkontrollen anbietet.

Die Grundlage II: Skript, das automatisiert wird

Um die Automatisierung einstellen zu können, wird ein Skript benötigt, in dem die einzelnen Befehle enthalten sind, die ausgeführt werden sollen. Dies kann das oben beschriebene Skript zum Versand einer E-Mail mit einem entsprechenden Report sein, aber auch ein Skript, das einen Report erstellt und diesen in einem Ordner speichert.

Wurde der Report mit Markdown erstellt, geht das Speichern über folgende Funktion:

library(rmarkdown)
render("markdowndatei.rmd", output_dir="Pfad-zum-Ordner")Code language: JavaScript (javascript)

Sollte die Markdown-Datei nicht im gleichen Ordner wie das Skript liegen, muss der komplette Pfad angegeben werden. Der Output erfolgt in dem Format, welches in der Markdown-Datei im YAML-Header hinterlegt ist. Ansonsten kann man in der Funktion das Format auch mit output_format vorgeben (z. B. pdf_document).

Wurde der Report mit Quarto erstellt, gibt es hier im R-Paket auch eine render-Funktion (quarto_render), mit der der Report erstellt wird.

Wichtig ist, dass die Skript-Datei, die automatisch ausgeführt werden soll, direkt auf der Festplatte liegt. Insofern empfiehlt es sich, beispielsweise im Dokumenten-Verzeichnis einen Unterordner „rscripts“ einzurichten und dort die Skripte zu speichern.

Durchführung: Die Windows-Aufgabenplanung & taskscheduleR

Windows bringt eine eigene Aufgabenplanung mit. Diese wird vor allem von Programmen genutzt, um unter anderem eine regelmäßige Überprüfung auf Updates durchzuführen. Allerdings lassen sich mit der Aufgabenplanung in Windows auch R-Skripte automatisieren. Damit man die neuen Aufgaben nicht per Hand anlegen muss, gibt es hierzu das Paket taskscheduleR. Mit diesem Paket können neue Aufgaben angelegt und bisherige Aufgaben gelöscht werden, ohne dass man direkt mit der Aufgabenplanung von Windows arbeiten muss.

Neue Aufgabe anlegen

Um eine neue Aufgabe anzulegen, gibt es im Paket die Funktion taskscheduler_create(). Beim Anlegen muss ein Taskname vergeben werden. Weiterhin wird das R-Skript benötigt und es muss festgelegt werden, wann die Aufgabe ausgeführt wird. Nachfolgend ein Beispiel für das Ausführen des Skriptes jeden Montag um 9 Uhr:

library(taskscheduleR)

skript_pfad <- c(„path/rskript.r“)

taskscheduler_create(taskname = "mein_erstes_r_skript",
                     rscript = skript_pfad, 
                     schedule = "WEEKLY", starttime = "09:00",
                     days = c('MON'))Code language: HTML, XML (xml)

Die Tage müssen in englischer Schreibweise angegeben werden. Eine Übersicht über weitere Beispiele findet man auch in der Dokumentation des Paketes. Zur einfacheren Nutzung gibt es auch ein RStudio-Addin, das nach dem Installieren des Paketes in RStudio aufgerufen werden kann.

Achtung: Das Skript wird nur ausgeführt, wenn der Computer zu diesem Zeitpunkt an ist. Daher sollten die Zeiträume für die automatische Ausführung so gewählt werden, dass der Computer immer zu diesen Zeitpunkten auch an ist.

Bestehende Aufgaben löschen

Mit der Funktion taskscheduler_delete() können bereits angelegt Aufgaben wieder gelöscht werden:

taskscheduler_delete(taskname = "mein_erstes_r_skript")Code language: JavaScript (javascript)

Aufgabenplanung in Windows manuell öffnen

Möchte man die Aufgabenplanung in Windows manuell öffnen, geht dies über die Systemsteuerung. Zuerst klickt man auf die Windows-Start-Schaltfläche und gibt dann das Wort Systemsteuerung ein. Sobald diese erscheint, kann man mit einem Klick die Systemsteuerung öffnen.

Danach klickt man auf „System und Sicherheit“. Wenn man in der Übersicht nun ganz herunter scrollt, kommt die Aufgabenplanung:

"Aufgaben planen" im Bereich System und Sicherheit in der Systemsteuerung
“Aufgaben planen” im Bereich System und Sicherheit in der Systemsteuerung

Mit einem Klick hierauf („Aufgaben planen“) öffnet sich die Aufgabenplanung und man sollte die bisher angelegten Aufgaben sehen. Kleiner Änderungen können dann auch dort vorgenommen werden, mit dem R-Paket ist aber ein Arbeiten direkt in der Aufgabenplanung nicht nötig.

Fazit

Mit dem Paket taskschedueR kann das regelmäßige Ausführen von R-Skripten in Windows optimal automatisiert werden. Hierdurch werden die Skripte automatisch ausgeführt und man muss nicht zuvor RStudio oder R öffnen. Gerade in Verbindung mit der Möglichkeit darüber auch E-Mails mit den entsprechenden Reports zu versenden, kann man so einen Workflow erstellt, mit dem regelmäßig die Ergebnisse von Erhebungen, Umfragen oder Daten veröffentlicht werden.

Das Vorgehen funktioniert bei meinen bisherigen Anwendungsfällen sehr gut und spart einiges an manuellen Arbeiten ein.

Wer nicht Windows, sondern Linux als Betriebssystem nutzt, kann sich das R-Paket cronR anschauen, das ähnliche Funktionen bietet.

Für das Mac-Betriebssystem habe ich noch keine entsprechenden R-Pakete gefunden. Falls hier jemand Lösungen kennt, kann er diese gerne in den Kommentaren zu diesem Beitrag hinterlassen.