如何在电子邮件正文中发送R markdown报告?

更新:Brandon Bertelsen的回答:


布兰登的答案产生了以下输出。 它不会像Rstudio那样产生漂亮的表格或突出显示的代码,并且它会使用unicode在一些html文件上崩溃,所以我没有使用它来自动化我的电子邮件报告。

我目前的做法是用Rstudio编译html,用chrome打开html文档,然后将html文档复制并粘贴到gmail中。 这工作得很好,看到这个要点: https : //gist.github.com/nelsonauner/a68b5a808c232ce7817e

在这里输入图像说明

原来的问题:


有没有简单的方法来发送一个R markdown文档作为电子邮件的主体,这样的电子邮件的正文看起来类似于使用Rstudio的“编织HTML”的结果?

这里有一个使用knitrrmarkdownmailR的基本可重复的例子

example.Rmd

 --- 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) ``` 

我使用self_contained: no因为默认的base64编码不适用于mailR (Yihui在这个SOpost中推荐 )

knit_and_send.R

 # compile using rmarkdown library(rmarkdown) rmarkdown::render("example.Rmd") library(mailR) send.mail(from = "me@gmail.com", to = "me@gmail.com", 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 = "me@gmail.com", to = "me@gmail.com", 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) 

两封电子邮件都成功发送。

针织邮件看起来像这样:


针织和电子邮件报告


和rmarkdown邮件看起来像这样。 (请注意,它也包括一堆javascript文件 – 我想我必须写一些脚本来删除它们)


在这里输入图像说明


但是他们都不像Rstudio的“编织为HTML”的报告那样好看,如下所示:

在这里输入图像说明

有什么build议么?

我认为一个真正的修复可能涉及一些HTML文件的后处理,其中包括在电子邮件友好的方式的CSS样式,同时删除JavaScript文件。

现在,我将使用knitr软件包。

请让我知道,如果有什么不清楚,我会改善这个问题。

相关SOpost:

在R有什么办法发送一个RMarkdown v2 html文件作为电子邮件的正文

mailR:如何在电子邮件中发送rmarkdown文档?

主要的问题是电子邮件阅读器剥离您的代码,不允许外部导入。 要获得基本的CSS支持,最好的策略是使用内联样式来保持一致的视图。 我们会在一分钟内回到那个。

首先,你必须设置你的Rmd文件有点不同,所以它排除了所有额外的JavaScript文件。 themehighlightmathjax都应该是null 。 注意,我已经添加了一个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来自http://foundation.zurb.com/emails 。 我build议使用这个作为你的基本主题。

有许多不同的脚本可以用来“embedded”你的css(这是一个动词),我在这里包含了使用premailer一个python包的说明。 不幸的是,他们都不会支持非常复杂的CSS引导。 所以你只需要用你自己的墨水或其他任何东西作为你的基础。

你可能需要在Ubuntu上为我安装一些元素:

 sudo apt-get install python-pip libxslt1-dev sudo pip install premailer 

现在,你可以做这样的事情。

 library(rmarkdown) library(mailR) rmarkdown::render("example.Rmd") system("python -m premailer -f example.html -o output.html") send.mail( from = "me@gmail.com", to = "me@gmail.com", 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) 

免责声明:您的里程可能会有很大的变化,取决于哪个电子邮件阅读器是您的目标