Programmering

Sådan sendes e-mail fra R og Gmail

På et eller andet tidspunkt i dit R-liv vil du sandsynligvis dele resultaterne af din analyse med kolleger, der ikke bruger R. Der er mange måder at gøre dette på. En af de nemmeste (og mindst dyre) er at sende dine resultater via e-mail.

Men det er lidt trist at automatisere hele analysearbejdsprocessen, kun at manuelt lave og sende en e-mail i slutningen. Heldigvis behøver du ikke. Der er flere R-pakker, der giver dig mulighed for at sende e-mail direkte fra et R-script. I denne artikel vil jeg demonstrere en af ​​dem: gmailr af Jim Hester, som nu er softwareingeniør hos RStudio.

Du skal selvfølgelig have en Gmail-konto, som er gratis at konfigurere, hvis du ikke har en. Derefter, før du kan bruge den konto fra R, skal du konfigurere den til API-adgang. Sådan gør du.

Gå til console.developers.google.com (ja, det er et underunderdomæne). Hvis du ikke allerede har et udviklerprojekt, bliver du bedt om at oprette et.

Øverst på dit dashboard skal du se et valg til "Aktivér API'er og tjenester." Klik på det.

Sharon Machlis,

Dernæst vil du søge efter Gmail API. Klik på det, og klik derefter på Aktiver.

R-scriptet skal bruge legitimationsoplysninger, så klik på Opret legitimationsoplysninger øverst til højre.

Sharon Machlis

I henhold til Jim Hesters instruktioner har vi brug for et klient-id, så jeg vælger klient-id.

Sharon Machlis,

Nu beder det om en applikationstype. Da "R-script" ikke er her, vil jeg vælge "Andet". Men alle radioknapperne er nedtonede. Det er fordi jeg ikke har konfigureret skærmbilledet med samtykke. Det er let at gå glip af, hvis du er fokuseret på valg af radioknapper; det er øverst til højre. Klik på det.

Sharon Machlis,

Din e-mail-adresse skal allerede være i skærmbilledet med samtykke-skærm. Det eneste andet krav er et navn på applikationen. Du kan kalde det hvad du vil.

Jim siger, at resten af ​​standardindstillingerne er fine, så rul ned og gem. Nu skal du være i stand til at vælge Applikationstype Andet, give applikationen et navn og klikke på Opret.

Konsollen skal derefter give dig et klient-id og en klienthemmelighed. Du kan bruge dem ved at tilføje dem til dit R-miljø, hvis du vil. Men Jim foreslår at downloade JSON-filen i stedet. Du kan downloade det til dit R-projektarbejdskatalog og huske det filnavn, du giver det.

Sharon Machlis,

Det afslutter opsætningen på Google-siden, og det er endelig tid til noget R-kode.

Først skal du sørge for, at du har installeret gmailr-pakken. Den er tilgængelig på CRAN, så du kan installere den med install.packages ("gmailr"). Indlæs derefter pakken i dit script med bibliotek (gmailr).

Før du gør noget andet, skal du konfigurere din arbejdende R-session til at bruge din downloadede JSON-legitimationsfil. Du kan gøre det med brug_sekretfil () funktion og navnet på din JSON-fil som argument. Hvis jeg kaldte min JSON-legitimationsfil DoMoreWithR.json, ville kommandoen være

use_secret_file ("DoMoreWithR.json")

Det er ret nemt at sende en besked.

For nogle eksempeldata downloadede jeg månedlige ledighed i USA og oprettede derefter en tekststreng kaldet latest_msg med info om den seneste ledighed. Bemærk, at i koden nedenfor bruger jeg limpakken til at samle den tegnstreng, jeg vil have til min besked, men det er fordi jeg kan lide at gøre det på den måde; sæt ind() eller indsæt0 () arbejde lige så godt.

Du kan bruge de R-genererede data, du gerne vil have, i din e-mail-besked. Hvis du gerne vil følge med min, er her koden (du skal have pacman-pakken installeret):

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

arbejdsløshed <- coredata (UNRATE)

month_starting <- index (UNRATE)

serie_længde <- længde (arbejdsløshed)

latest_msg <- lim ("Den seneste ledighed i USA var {arbejdsløshed [serie_længde]} i den måned, der begynder med {måned_start [serie_længde]}. Det er {arbejdsløshed [serie_længde] - arbejdsløshed [serie_længde - 1]} procentpoint forskel fra den foregående måned.")

Dernæst vil jeg oprette et MIME-e-mail-objekt og derefter tilføje en til adresse, en fra adresse, emnetekst og min meddelelsesdel.

my_email_message%

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

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

emne ("Min testmeddelelse")%>%

text_body (seneste_msg)

Hvis du gør dette og derefter kontrollerer strukturen for min_email_message med str (min_tekstmeddelelse) ville du se, at det er en liste med en klasse af mime.

Når du har oprettet dit MIME-beskedobjekt, kan du sende det med Send besked() fungere. Argumentet er kun navnet på mit MIME-objekt, i dette tilfælde my_email_message. Så den fulde kommando i dette tilfælde er

send_message (my_email_message)

Når du kører send_message () første gang, bliver du sandsynligvis spurgt, om du vil cache autorisation mellem R-sessioner. Jeg foreslår, at du siger ja. Første gang du kører dette, bliver du også bedt om i din browser at autorisere dit R-script til at bruge din Google-konto.

Der er mere, du kan gøre med gmailr. En mulighed er at oprette en HTML-besked, så du kan bruge markering som fed og kursiv.

Her indeholder min beskedtekst HTML-lignende afsnitsmærker og fed og kursiv, og jeg sender den til min arbejdsadresse.

html_msg_text <- lim ("

Den seneste ledighed i USA var

{arbejdsløshed [serie_længde]}i den måned, der starter

{måned_start [serie_længde]}. Det er

{arbejdsløshed [series_length] - arbejdsløshed [series_length - 1]}

procentpoint forskel fra den foregående måned.

Data fra US Bureau of Labor Statistics.

")
min_html_meddelelse%

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

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

emne ("Min testmeddelelse")%>%

html_body (html_msg_text)

send_message (min_html_message)

Desværre kender jeg ikke en måde til nemt at inkludere et billede, der er genereret fra R direkte i meddelelsesteksten. Men det er ret ligetil at inkludere en som en vedhæftet fil.

Øverst i scriptet nedenfor omdanner jeg mine arbejdsløshedsdata til en dataramme med metrics fra 2000 og senere, så jeg kan bruge ggplot til at tegne dem og derefter gemme grafen i en fil.

Denne næste del af koden er dog det, der er vigtigt at vide for e-mail. Først opretter jeg som før en tekststreng til min beskedtekst med limpakken. Det nye er de sidste to linier med kode, der skaber mit MIME-objekt. Den sidste linje, Vedhæft fil(), vedhæfter min PNG-fil til e-mailen. Linjen før er vigtig, hvis du ønsker, at tekst skal vises i e-mailens brødtekst. Uden at bruge begge dele text_body ()ogvedhæft_del () for brødteksten vises teksten ikke, når du vedhæfter en fil. Bare noget at huske.

Så kan jeg bruge det samme Send besked() funktion til at sende den.

un_df%

filter (måned_start> = as.Date ("2000-01-01"))%>%

omdøb (arbejdsløshed = UNRATE)

mygraph <- ggplot (un_df, aes (måned_start, arbejdsløshed)) +

geom_line () +

ggtitle ("USAs månedlige ledighed") +

xlab ("Måned starter") +

ylab ("")

ggsave ("arbejdsløshed_graph.png")
msg_text <- lim ("Den seneste ledighed i USA var {arbejdsløshed [serie_længde]} i den måned, der starter {måned_start [serie_længde]}. Det er {arbejdsløshed [serie_længde] - arbejdsløshed [serie_længde - 1]} procentpoint forskel fra den foregående måned. En graf over dataene siden januar 2000 er vedhæftet. ")

besked2%

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

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

emne ("Min sms med vedhæftet graf")%>%

text_body (msg_text)%>%

vedhæftet del (msg_text)%>%

vedhæftet fil ("arbejdsløshed_graph.png")

send_message (besked2)

Hvis du vil, kan du bruge funktionen create_draft () for at oprette en kladde til din Gmail-konto, hvis du vil kontrollere, hvordan den ser ud, før du sender den ud. I dette tilfælde, create_draft (besked2) ville oprette et udkast til min filvedhæftningsmeddelelse.

Hvis du gerne vil se, hvordan alt dette ser ud i aktion, skal du tjekke videoen øverst i denne artikel. Og for flere R-tip, gå til siden Gør mere med R på eller se YouTube-afspilningslisten Gør mere med R.