Nel*_*son 49 email r knitr r-markdown
更新:Brandon Bertelsen的回答:
布兰登的答案产生以下输出.它不会像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)
```
Run Code Online (Sandbox Code Playgroud)
我正在使用,self_contained: no
因为默认的base64编码不起作用mailR
(Yihui在此SO帖子中推荐)
# 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)
Run Code Online (Sandbox Code Playgroud)
两封电子邮件都成功发送.
针织电子邮件看起来像这样:
而rmarkdown电子邮件看起来像这样.(请注意,它还包含一堆javascript文件 - 我想我必须编写一些脚本来删除它们)
但是它们都不像Rstudio的"Knit as HTML"报告那样好看,它看起来像这样:
有什么建议?
我认为一个真正的修复可能涉及一些html文件的后处理,它以一种电子邮件友好的方式结合css样式,同时删除javascript文件.
现在,我将使用该knitr
包.
如果问题不清楚,请告诉我,我会改进这个问题.
相关的SO帖子:
Bra*_*sen 14
主要问题是电子邮件阅读器剥离您的代码并且不允许外部导入.要获得基本的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)
```
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
现在,你可以做这样的事情.
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)
Run Code Online (Sandbox Code Playgroud)
免责声明:根据您的目标电子邮件阅读器,您的里程可能会有很大差异
R Studio 发布了一个特定于电子邮件的包blastula
。我发现这在为电子邮件内联 CSS 方面做得很好。
https://github.com/rich-iannone/blastula