更新:Brandon Bertelsen的回答:
Brandon的回答产生以下输出。 它不会像Rstudio那样产生漂亮的表格或突出显示代码,并且它会在一些带有unicode的html文件上崩溃,因此我不会使用它来自动化我的电子邮件报告。
我目前的方法是使用Rstudio编译为html,在chrome中打开html文档,然后将html文档复制并粘贴到gmail中。这非常有效,请参阅此要点:https://gist.github.com/nelsonauner/a68b5a808c232ce7817e
是否有一种简单的方法可以将R降价文档作为电子邮件正文发送,以便电子邮件的正文与使用Rstudio的“编织HTML”的结果类似?
以下是使用knitr
,rmarkdown
和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)
```
我正在使用self_contained: no
,因为默认的base64编码不适用于mailR
(Yihui在this SO post推荐)
# 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的“Knit as HTML”报告那样好看,它看起来像这样:
有什么建议吗?
我认为真正的修复可能涉及对html文件进行一些后处理,该文件在删除javascript文件时以电子邮件友好的方式包含css样式。
现在,我将使用knitr
包。
如果问题不清楚,请告诉我,我会改进这个问题。
相关的SO帖子:
In R is there any way to send an RMarkdown v2 html file as the body of an email
答案 0 :(得分:13)
主要问题是电子邮件阅读器会删除您的代码并且不允许外部导入。要获得基本的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。我建议使用它作为基本主题。
您可以使用许多不同的脚本来进行内联"你的CSS(这是一个动词),我在这里包含了使用premailer python包的说明。不幸的是,它们都不会像bootstrap那样支持非常复杂的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)
免责声明:根据您的目标电子邮件阅读器,您的里程可能会有很大差异
答案 1 :(得分:1)
R Studio已发布特定于电子邮件的软件包blastula
。我发现这在为电子邮件内联CSS方面做得很好。