gpt4 book ai didi

r - 使用 SendMailR 将电子邮件数据框作为电子邮件正文中的表格

转载 作者:行者123 更新时间:2023-12-01 18:56:28 26 4
gpt4 key购买 nike

我正在尝试使用 SendMailR 发送数据帧。我可以将其作为格式合理的附件发送。不过,我想在电子邮件正文中发送数据框。我尝试了 capture.output、print、sprintf,但我什至无法使格式接近。

例如我尝试了以下语法

for (i in 1:nrow(df)){
MSG = c(MSG,rownames(df)[1],as.character(unlist(df[i,])),'\n')
}
MSG = sprintf('%-10s',MSG)
sendmail(from,to,subject,msg = list(MSG,attachment1,attachment2 ... ))

换句话说,我认为可能有必要将我的数据帧转换为带有/n 和 sprintf('s-10%') 等的格式并将其存储在 MSG 中。有人能指出我正确的方向吗?

最佳答案

虽然使用 sendmailR 发送 HTML 邮件并不简单,但根据去年与软件包作者的邮件讨论是可能的(再次感谢 Olaf Mersmann 的友善帮助) - 只需覆盖 Content-Type header 。例如:

msg <- mime_part('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>HTML demo</title>
<style type="text/css">
</style>
</head>
<body>
<h1>HTML demo</h1>
</body>
</html>')

## Override content type.
msg[["headers"]][["Content-Type"]] <- "text/html"

from <- '<foo@example.com>'
to <- "<bar@example.com>"
subject <- "HTML test"
body <- list(msg)
sendmail(from, to, subject, body, ...)
<小时/>

另一方面,HTML 并不真正需要以人类可读的格式呈现表格或data.frame。有例如ascii 包或我的 pander pkg 可以将 R 对象转换为 markdown。快速演示:

> library(pander)
> panderOptions('table.split.table', Inf)
> pander(head(iris, 3))

-------------------------------------------------------------------
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
-------------- ------------- -------------- ------------- ---------
5.1 3.5 1.4 0.2 setosa

4.9 3 1.4 0.2 setosa

4.7 3.2 1.3 0.2 setosa
-------------------------------------------------------------------

> pander(head(iris, 3), style = 'grid')


+----------------+---------------+----------------+---------------+-----------+
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
+================+===============+================+===============+===========+
| 5.1 | 3.5 | 1.4 | 0.2 | setosa |
+----------------+---------------+----------------+---------------+-----------+
| 4.9 | 3 | 1.4 | 0.2 | setosa |
+----------------+---------------+----------------+---------------+-----------+
| 4.7 | 3.2 | 1.3 | 0.2 | setosa |
+----------------+---------------+----------------+---------------+-----------+

如果您想将其连接到电子邮件正文,请使用 pander.return 来返回字符向量,而不是写入控制台。还有一些其他可用的表格样式,还有一些有用的panderOptions,例如设置小数点、日期格式等:http://rapporter.github.io/pander/

关于r - 使用 SendMailR 将电子邮件数据框作为电子邮件正文中的表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21929170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com