So senden Sie E-Mails von R und Google Mail

Irgendwann in Ihrem R-Leben möchten Sie wahrscheinlich die Ergebnisse Ihrer Analyse mit Kollegen teilen, die kein R verwenden. Es gibt viele Möglichkeiten, dies zu tun. Eine der einfachsten (und kostengünstigsten) ist das Versenden Ihrer Ergebnisse per E-Mail.

Es ist jedoch traurig, Ihren gesamten Analyse-Workflow zu automatisieren, nur um am Ende manuell eine E-Mail zu erstellen und zu senden. Zum Glück müssen Sie nicht. Es gibt mehrere R-Pakete, mit denen Sie E-Mails direkt aus einem R-Skript senden können. In diesem Artikel werde ich eines davon vorführen: gmailr von Jim Hester, der jetzt Software-Ingenieur bei RStudio ist.

Natürlich benötigen Sie ein Google Mail-Konto, das Sie kostenlos einrichten können, wenn Sie noch keines haben. Bevor Sie dieses Konto von R aus verwenden können, müssen Sie es für den API-Zugriff einrichten. Hier ist wie.

Gehen Sie zu console.developers.google.com (ja, das ist eine Sub-Subdomain). Wenn Sie noch kein Entwicklerprojekt haben, werden Sie aufgefordert, eines zu erstellen. 

Oben in Ihrem Dashboard sollte die Option "APIs und Dienste aktivieren" angezeigt werden. Klicken Sie darauf.

Sharon Machlis,

Als Nächstes möchten Sie nach der Google Mail-API suchen. Klicken Sie darauf und dann auf Aktivieren. 

Das R-Skript benötigt Anmeldeinformationen. Klicken Sie daher oben rechts auf Anmeldeinformationen erstellen.

Sharon Machlis

Gemäß den Anweisungen von Jim Hester benötigen wir eine Kunden-ID, daher wähle ich die Kunden-ID.

Sharon Machlis,

Jetzt wird nach einem Anwendungstyp gefragt. Da "R-Skript" nicht hier ist, möchte ich "Andere" wählen. Alle Optionsfelder sind jedoch ausgegraut. Das liegt daran, dass ich den Zustimmungsbildschirm nicht konfiguriert habe. Das ist leicht zu übersehen, wenn Sie sich auf die Auswahl der Optionsfelder konzentrieren. Es ist oben rechts. Klicken Sie darauf.

Sharon Machlis,

Ihre E-Mail-Adresse sollte sich bereits im Einwilligungsbildschirm befinden. Die einzige andere Anforderung ist ein Name für die Anwendung. Sie können es so nennen, wie Sie möchten.

Jim sagt, dass der Rest der Standardeinstellungen in Ordnung ist. Scrollen Sie also nach unten und speichern Sie. Jetzt sollten Sie in der Lage sein, den Anwendungstyp Andere auszuwählen, der Anwendung einen Namen zu geben und auf Erstellen zu klicken.

Die Konsole sollte Ihnen dann eine Client-ID und ein Client-Geheimnis geben. Sie können sie verwenden, indem Sie sie Ihrer R-Umgebung hinzufügen, wenn Sie möchten. Jim schlägt jedoch vor, stattdessen die JSON-Datei herunterzuladen. Sie können das in Ihr R-Projekt-Arbeitsverzeichnis herunterladen und sich den Dateinamen merken, den Sie ihm gegeben haben.

Sharon Machlis,

Damit ist die Einrichtung auf der Google-Seite abgeschlossen, und es ist endlich Zeit für einen R-Code. 

Stellen Sie zunächst sicher, dass Sie das Google Mail-Paket installiert haben. Es ist auf CRAN verfügbar, sodass Sie es mit installieren können install.packages("gmailr"). Laden Sie dann das Paket in Ihr Skript mit library(gmailr).

Bevor Sie etwas anderes tun, sollten Sie Ihre funktionierende R-Sitzung so einrichten, dass Ihre heruntergeladene JSON-Anmeldeinformationsdatei verwendet wird. Sie können dies mit der use_secret_file()Funktion und dem Namen Ihrer JSON-Datei als Argument tun . Wenn ich meine JSON-Anmeldeinformationsdatei DoMoreWithR.json aufrufen würde, wäre der Befehl 

use_secret_file("DoMoreWithR.json")

Eigentlich ist das Senden einer Nachricht ziemlich einfach.

Für einige Beispieldaten habe ich monatliche US-Arbeitslosenquoten heruntergeladen und dann eine Textzeichenfolge mit dem Namen "latest_msg" mit Informationen zur neuesten Arbeitslosenquote erstellt. Beachten Sie, dass ich im folgenden Code das Klebepaket verwende, um die gewünschte Zeichenfolge für meine Nachricht zusammenzustellen, aber das liegt daran, dass ich es gerne so mache. paste()oder paste0()genauso gut arbeiten.

Sie können beliebige R-generierte Daten in Ihrer E-Mail-Nachricht verwenden. Wenn Sie meinem folgen möchten, finden Sie hier den Code (Sie müssen das Pacman-Paket installiert haben):

pacman :: p_load (quantmod, kleber, xts, dplyr, ggplot2)
getSymbols ("UNRATE", src = "FRED")

Arbeitslosigkeit <- coredata (UNRATE)

month_starting <- index (UNRATE)

Serienlänge <- Länge (Arbeitslosigkeit)

latest_msg <- glue ("Die letzte US-Arbeitslosenquote war {Arbeitslosigkeit [Serienlänge]} in dem Monat, der mit {Monatsstart [Serienlänge]} beginnt. Das ist {Arbeitslosigkeit [Serienlänge] - Arbeitslosigkeit [Serienlänge - 1]} Prozentpunkte Unterschied zum vorherigen Monat.")

Als Nächstes möchte ich ein MIME-E-Mail-Objekt erstellen und dann eine Adresse, eine Absenderadresse, einen Betreff und meinen Nachrichtentext hinzufügen.

my_email_message%

an ("[email protected]")%>%

von ("[email protected]")%>%

Betreff ("Meine Testnachricht")%>%

text_body (latest_msg)

Wenn Sie dies tun und dann die Struktur von my_email_message mit überprüfen, werden str(my_text_message)Sie feststellen, dass es sich um eine Liste mit einer Klasse von handelt mime.

Nachdem Sie Ihr MIME-Nachrichtenobjekt erstellt haben, können Sie es mit der send_message()Funktion senden . Das Argument ist nur der Name meines MIME-Objekts, in diesem Fall my_email_message. Der vollständige Befehl in diesem Fall lautet also

send_message (my_email_message)

Wenn Sie send_message () zum ersten Mal ausführen, werden Sie wahrscheinlich gefragt, ob Sie die Autorisierung zwischen R-Sitzungen zwischenspeichern möchten. Ich schlage vor, Sie sagen ja. Wenn Sie dies zum ersten Mal ausführen, werden Sie in Ihrem Browser auch aufgefordert, Ihr R-Skript zur Verwendung Ihres Google-Kontos zu autorisieren.

Mit gmailr können Sie noch mehr tun. Eine Möglichkeit besteht darin, eine HTML-Nachricht zu erstellen, sodass Sie Markups wie fett und kursiv verwenden können.

Hier enthält mein Nachrichtentext HTML-ähnliche Absatzmarkierungen sowie Fett- und Kursivschrift, und ich sende ihn an meine Arbeitsadresse. 

html_msg_text <- kleber ("

Die letzte Arbeitslosenquote in den USA war

{unemployment[series_length]}, in the month starting

{month_starting[series_length]}. That's

{unemployment[series_length] - unemployment[series_length - 1]}

percentage points difference from the prior month.

Data from the U.S. Bureau of Labor Statistics.

")
my_html_message %

to("[email protected]") %>%

from("[email protected]") %>%

subject("My test message") %>%

html_body(html_msg_text)

send_message(my_html_message)

Unfortunately, I don’t know a way to easily include an image generated from R directly in the message body. But it’s pretty straightforward to include one as an attachment. 

At the top of the script below, I’m turning my unemployment rate data into a data frame with metrics from 2000 and later, so I can use ggplot to graph it, and then save the graph to a file. 

This next part of the code is what’s important to know for email, though. First, like before, I’m creating a text string for my message text with the glue package. What’s new is the last two lines of code creating my MIME object. That last line, attach_file(), attaches my PNG file to the email. The line before is important if you want text to show up in the body of the email. Without using both text_body()andattach_part() for the body text, text won’t show up when you attach a file. Just something to remember.

Then I can use the same send_message() function to send it.

un_df %

filter(month_starting >= as.Date("2000-01-01")) %>%

rename(unemployment = UNRATE)

mygraph <- ggplot(un_df, aes(month_starting, unemployment)) +

geom_line() +

ggtitle("US Monthly Unemployment") +

xlab("Month Starting") +

ylab ("")

ggsave("unemployment_graph.png")
msg_text <- glue("The latest US unemployment rate was {unemployment[series_length]}, in the month starting {month_starting[series_length]}. That's {unemployment[series_length] - unemployment[series_length - 1]} percentage points difference from the prior month. A graph of the data since January 2000 is attached.")

message2 %

to("[email protected]") %>%

from("[email protected]") %>%

subject("My text message with attached graph") %>%

text_body(msg_text) %>%

attach_part(msg_text) %>%

attach_file("unemployment_graph.png")

send_message(message2)

Wenn Sie möchten, können Sie die Funktion verwenden create_draft() , um einen Nachrichtenentwurf in Ihrem Google Mail-Konto zu erstellen, wenn Sie vor dem Versenden überprüfen möchten, wie er aussieht. In diesem Fall create_draft(message2)würde ein Entwurf meiner Dateianhangsnachricht erstellt.

Wenn Sie sehen möchten, wie dies alles in Aktion aussieht, sehen Sie sich das Video oben in diesem Artikel an. Weitere R-Tipps finden Sie auf der Videoseite "Do More With R" auf oder auf der YouTube-Wiedergabeliste "Do More With R".