如何在电子邮件正文中发送R markdown报告?
更新:Brandon Bertelsen的回答:
布兰登的答案产生了以下输出。 它不会像Rstudio那样产生漂亮的表格或突出显示的代码,并且它会使用unicode在一些html文件上崩溃,所以我没有使用它来自动化我的电子邮件报告。
我目前的做法是用Rstudio编译html,用chrome打开html文档,然后将html文档复制并粘贴到gmail中。 这工作得很好,看到这个要点: https : //gist.github.com/nelsonauner/a68b5a808c232ce7817e
原来的问题:
有没有简单的方法来发送一个R markdown文档作为电子邮件的主体,这样的电子邮件的正文看起来类似于使用Rstudio的“编织HTML”的结果?
这里有一个使用knitr
, rmarkdown
和mailR
的基本可重复的例子
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文件。 theme
, highlight
和mathjax
都应该是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)
免责声明:您的里程可能会有很大的变化,取决于哪个电子邮件阅读器是您的目标