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

2024-04-27

更新:布兰登·贝特尔森的回答:

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

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

原问题:

有没有一种简单的方法可以将 R markdown 文档作为电子邮件正文发送,以便电子邮件正文看起来类似于使用 Rstudio 的“Knit HTML”的结果?

这是一个基本的可重现示例,使用knitr, rmarkdown, and mailR

示例.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(一辉推荐这个帖子 https://stackoverflow.com/questions/32520928/in-r-is-there-any-way-to-send-an-rmarkdown-v2-html-file-as-the-body-of-an-email)

knit_and_send.R

# compile using rmarkdown
library(rmarkdown)
rmarkdown::render("example.Rmd")

library(mailR)

send.mail(from = "[email protected] /cdn-cgi/l/email-protection",
          to = "[email protected] /cdn-cgi/l/email-protection",
          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] /cdn-cgi/l/email-protection",
          to = "[email protected] /cdn-cgi/l/email-protection",
          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 文件进行一些后处理,以电子邮件友好的方式合并 css 样式,同时删除 javascript 文件。

现在,我将使用knitr包裹。

如果有不清楚的地方,请告诉我,我会改进问题。

相关SO帖子:

在 R 中,有没有办法将 RMarkdown v2 html 文件作为电子邮件正文发送 https://stackoverflow.com/questions/32520928/in-r-is-there-any-way-to-send-an-rmarkdown-v2-html-file-as-the-body-of-an-email

mailR:如何将rmarkdown文档作为电子邮件正文发送? https://stackoverflow.com/questions/24346856/mailr-how-to-send-rmarkdown-documents-as-body-in-email


主要问题是电子邮件阅读器会删除您的代码并且不允许外部导入。要获得基本的 CSS 支持,最好的策略是使用内联样式以获得一致的视图。我们稍后会回到这个话题。

首先,您必须稍微不同地设置 Rmd 文档,以便排除所有额外的 javascript 文件。theme, highlight and 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 http://foundation.zurb.com/emails。我建议使用它作为您的基本主题。

您可以使用许多不同的脚本来“内联”您的 css(这是一个动词),我在此处提供了使用说明预邮者 https://github.com/peterbe/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 = "[email protected] /cdn-cgi/l/email-protection",
  to = "[email protected] /cdn-cgi/l/email-protection",
  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)

免责声明:根据您的目标电子邮件阅读器,您的里程可能会有很大差异

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在电子邮件正文中发送 R Markdown 报告? 的相关文章

  • R markdown 引文标识符

    R markdown 允许使用 YAML 元数据部分中的参考书目元数据字段指定参考书目文件 例如 title Sample Document output html document bibliography bibliography bi
  • 将函数应用于每个列组合

    我有一个数据框n列并希望对每个列应用一个函数组合列 这与如何cor 函数将数据帧作为输入并生成相关矩阵作为输出 例如 X lt data frame A rnorm 100 B rnorm 100 C rnorm 100 cor X 这将生
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如
  • 根据列A:列B范围内的值查找数据框中的相应行[重复]

    这个问题在这里已经有答案了 我有一个 data frame 和一个向量 例如 df data frame id 1 3 start c 1 1000 16000 end c 100 1100 16100 info c a b c vec c
  • 使用 plyr daply 将数据帧转换为矩阵

    我正在尝试使用daply函数在plyr包 但我无法让它正确输出 尽管组成矩阵的变量是数字 但矩阵的元素是列表 而不是变量本身 例如 以下是一小部分数据 Month Vehicle Samples 1 Oct 10 31057 256 2 O
  • 当添加列较少时追加到现有 SQLite 表,而不将数据库读入 R

    是否有一些简单的方法 无论是在 SQL 端还是在 R 端 将 data frame 附加到具有更多列的现有表 缺失的列应该用 NA 填充 如果它能够优雅地处理比表 1 列数更多的表 2 那么会加分吗 library RSQLite Crea
  • 如何使用 tidyr 将向量中字符串中的每个字符分隔到一列中

    我想将向量中的每个字符串分成列 但我做不到 library tidyr library dplyr df lt data frame x c abe bas dds eer df gt separate x c A B C sep 1 我想
  • 如何在折线图中显示 Sep-12 格式的数据并抑制网格线和灰色背景?

    我正在努力使日期格式正确 数据已经是melt 格式 数据中有四个变量碰巧共享相同的数据 我只是想绘制一个简单的四线折线图 每个变量作为一条单独的线 并将 Sep 12 显示为最新数据点 我正在使用旧的 ggplot 请随意 我有两个问题 第
  • dplyr 总结小计

    Excel 中数据透视表的一大优点是它们会自动提供小计 首先 我想知道 dplyr 中是否已经创建了任何可以实现此目的的东西 如果没有 实现它的最简单方法是什么 在下面的示例中 我按气缸和化油器的数量显示了平均排量 对于每组气缸 4 6 8
  • 如何在r中进行左连接[重复]

    这个问题在这里已经有答案了 我有两个数据集一和二 数据集一 a b c 111 a 1 112 b 2 113 c 3 114 d 4 115 e 5 数据集二 e d g 222 ss 11 111 ff 22 113 ww 33 114
  • linux下无法安装Cairo包

    我在本地下载该软件包并尝试安装它 但出现此错误 R CMD INSTALL l usr local lib64 R library Cairo 1 5 1 tar gz 我得到他的错误 checking for PNG support in
  • 通过 :: 调用包中的函数是一个好习惯吗

    我正在编写一些 R 函数 这些函数在其他包中使用一些有用的函数 例如stringr and base64enc 不打电话好不好library or require 首先加载这些包但要使用 直接引用我需要的功能 比如stringr str m
  • 使用 SP 包中的 SpatialPoints() 转换坐标参考系 (CRS) 以创建空间数据框

    Issue 我有一个形状文件我已将其导入到 R 中 并为正在进行的分析选择了感兴趣的变量 我的最终目标是插值点数据 海豚 ID 获取海面温度 SST 堆栈中每个单独的光栅文件的值70 栅格来自名为 ncin SST 的对象 该对象是使用函数
  • 2013 年 HTML 电子邮件:如何控制段落和图像等元素之间的间距?

    我目前正在重新设计一些 HTML 电子邮件模板 这是我几年来没有做过如此深入的事情 我已经在 HTML 文件中制作了模板 我正在浏览器中本地测试该模板 一切看起来都很好 我使用表格进行布局 我使用的唯一其他标签是 p a and img C
  • 在R闪亮中,如何在UI端使用在SERVER端计算的值?

    在我的 R闪亮应用程序中 我想调整我的高度d3heatmap 见包装d3热图 https cran r project org web packages d3heatmap index html 作为我的数据框行数的函数 有一个论点heig
  • 如果指定了多个存储库,install.packages 的行为是什么?

    从文档中并不清楚如果在 install packages 中指定了多个存储库会出现什么行为 我的直觉告诉我 它将尝试第一个存储库 如果找不到包 它将尝试第二个存储库 依此类推 不幸的是 情况似乎并非如此 我看到的是 只尝试了第一个 并返回错
  • R中一张图中的多个条形图

    我是 R 初学者 我需要创建一个像这样的图表 https i stack imgur com az56z jpg https i stack imgur com az56z jpg 我不知道如何生成整个数据集 基本思想是某个外显子 ID 会
  • R:构建二阶转移矩阵和得分序列

    其他问题 有另一个问题 https stackoverflow com questions 29728436 fit and evaluate a second order transition matrix markov process
  • RPostgreSQL 无法关闭连接

    我有一个闪亮的应用程序 使用它连接到数据库RPostgreSQL 在应用程序结束时 连接关闭 驱动程序应该被卸载 但我收到错误 警告我连接未关闭 代码看起来像这样 in the app R file but not in the serve
  • 使用开源闪亮服务器时,我的图标不会显示在我的应用程序的浏览器选项卡上

    我一直在尝试找到一种方法将 ico 与托管在开源闪亮服务器上的闪亮应用程序的快捷方式关联起来 最终 我希望 ico 显示为我的应用程序快捷方式的图形 而且 我希望用户在创建应用程序的快捷方式时显示 可用此图标 听起来很简单 但事实证明这是一

随机推荐