mise à jour: réponse de Brandon Bertelsen :
La réponse de Brandon produit la sortie suivante. Il ne produit pas de belles tables ni ne met en évidence le code comme le fait Rstudio, et il se bloque sur certains fichiers html avec unicode, donc je ne l'utilise pas pour automatiser mes rapports par e-mail.
Mon approche actuelle consiste à compiler avec Rstudio en html, ouvrir le document html en chrome, puis copier et coller le document html dans gmail. Cela fonctionne assez bien, voir cet Gist: https://Gist.github.com/nelsonauner/a68b5a808c232ce7817e
Existe-t-il un moyen simple d'envoyer un document de démarque R en tant que corps d'un e-mail, de sorte que le corps de l'e-mail ressemble aux résultats de l'utilisation du "Knit HTML" de Rstudio?
Voici un exemple reproductible de base utilisant knitr
, rmarkdown
et mailR
---
title: "Report for email"
output:
html_document:
self_contained: no
---
```{r}
summary(cars)
```
You can also embed plots, for example:
```{r, echo=FALSE}
plot(cars)
```
J'utilise self_contained: no
puisque l'encodage base64 par défaut ne fonctionne pas avec mailR
(recommandé par Yihui dans this SO post )
# compile using rmarkdown
library(rmarkdown)
rmarkdown::render("example.Rmd")
library(mailR)
send.mail(from = "[email protected]",
to = "[email protected]",
subject = "R Markdown Report - rmarkdown",
html = T,
inline = T,
body = "example.html",
smtp = list(Host.name = "smtp.gmail.com", port = 465, user.name = "me", passwd = "password", ssl = T),
authenticate = T,
send = T)
#compile using knitr
library(knitr)
knit2html("example.Rmd",options="")
send.mail(from = "[email protected]",
to = "[email protected]",
subject = "R Markdown Report - knitr",
html = T,
inline = T,
body = "example.html",
smtp = list(Host.name = "smtp.gmail.com", port = 465, user.name = "me", passwd = "password", ssl = T),
authenticate = T,
send = T)
Les deux e-mails ont bien été envoyés.
L'e-mail tricoté ressemble à ceci:
et l'e-mail rmarkdown ressemble à ceci. (Notez qu'il comprend également un tas de fichiers javascript - je pense que je devrais écrire des scripts pour les supprimer)
Mais aucun d'eux n'a l'air aussi agréable que le rapport produit à partir de "Knit as HTML" de Rstudio, qui ressemble à ceci:
Aucune suggestion?
Je pense qu'un vrai correctif pourrait impliquer un certain post-traitement du fichier html qui incorpore le style css d'une manière conviviale par e-mail tout en supprimant les fichiers javascript.
Pour l'instant, je vais utiliser le package knitr
.
Veuillez me faire savoir si quelque chose n'est pas clair et je vais améliorer la question.
Pertinents SO posts:
Dans R, existe-t-il un moyen d'envoyer un fichier html RMarkdown v2 comme le corps d'un e-mail
mailR: comment envoyer des documents rmarkdown en tant que corps dans un e-mail?
Le principal problème est que les lecteurs de messagerie suppriment votre code et n'autorisent pas les importations externes. Pour obtenir une prise en charge CSS de base, la meilleure stratégie consiste à utiliser des styles en ligne pour avoir une vue cohérente. Nous y reviendrons dans une minute.
Tout d'abord, vous devez configurer votre document Rmd un peu différemment afin d'exclure tous les fichiers javascript supplémentaires. theme
, highlight
et mathjax
doivent tous être null
. Remarquez, j'ai ajouté un attribut css
.
---
title: "Report for email"
output:
html_document:
self_contained: no
theme: null
highlight: null
mathjax: null
css: ink.css
---
```{r}
summary(cars)
```
You can also embed plots, for example:
```{r, echo=FALSE}
plot(cars)
```
ink.css
vient de http://foundation.zurb.com/emails . Je recommande d'utiliser ceci comme thème de base.
Il existe un certain nombre de scripts différents que vous pouvez utiliser pour "inline" votre css (c'est un verbe), j'ai inclus des instructions ici pour utiliser premailer a python Malheureusement, aucun d'entre eux ne prendra en charge des CSS très compliqués comme le bootstrap. Vous n'aurez donc qu'à vous contenter de votre propre style construit à l'aide d'encre ou de quoi que ce soit comme base.
Vous devrez peut-être installer certains éléments, pour moi sur Ubuntu:
Sudo apt-get install python-pip libxslt1-dev
Sudo pip install premailer
Maintenant, vous pouvez faire quelque chose comme ça.
library(rmarkdown)
library(mailR)
rmarkdown::render("example.Rmd")
system("python -m premailer -f example.html -o output.html")
send.mail(
from = "[email protected]",
to = "[email protected]",
subject = "R Markdown Report - rmarkdown",
html = T,
inline = T,
body = "output.html",
smtp = list(
Host.name = "smtp.gmail.com",
port = 465,
user.name = "me",
passwd = "password",
ssl = T),
authenticate = T,
send = T)
AVERTISSEMENT: votre kilométrage peut varier énormément en fonction du lecteur de messagerie qui est votre cible