gpt4 book ai didi

r - 列宽与使用 sendmailr 从 R 发送的 pander 表中的表数据不对齐

转载 作者:行者123 更新时间:2023-12-01 22:18:11 24 4
gpt4 key购买 nike

我正在使用“pander”和“sendmailr”包在电子邮件正文中发送一个小数据帧,而不是作为附件。我想从 Gmail 帐户发送邮件或将其发送至 Gmail 帐户。

我已经很接近了,但是列标题不会像在 Rstudio 中那样与电子邮件正文中的列本身对齐 - 基本上列标题太宽,无法与下面的数据列对齐。

问题似乎在于各种电子邮件客户端中破折号和空格的压缩方式(我通过网络以及 OS X Mavericks 附带的电子邮件客户端在 gmail、yahoo 和 hotmail 中尝试过此操作)。我能够通过转到“首选项”并选中标有“对纯文本消息使用固定宽度字体”的框来解决 OS X 电子邮件客户端中的问题,但我希望它能够在多个设备上工作,具有多个我的许多同事的客户等,所以我想知道是否有一种不涉及全局电子邮件设置的方法。

这是重现问题的代码:

library(sendmailR) # for emails from R
library(pander) # for table-formatting that does not require HTML

results <- head(iris)
pander(results) # widths look great so far...
a = pandoc.table.return(results)
strsplit(a, "\n") # widths still look great...

panderOptions('table.split.table', Inf) # show all columns on same line

msg_content <- mime_part(
pandoc.table.return(results, style = "multiline")
)

# I'm using my own gmail address for email_from and email_to
sendmail(from = email_from,
to = email_to,
subject = "test",
msg = msg_content
)

...并且收到的电子邮件存在上述问题。

接下来您可以看到一张说明问题的图像:

Described problem

最佳答案

纯文本电子邮件和使用 Markdown 表的问题在于,电子邮件客户端通常使用非固定字体显示文本,并且您必须在所有电子邮件客户端中使用自定义设置来覆盖该设置(就像您对 OS X 电子邮件客户端所做的那样)。另一方面,这就是 HTML 邮件流行的原因:)

因此,让我们创建一封 HTML 邮件并将 Markdown 表格包含在 pre block 中:

msg_content <- mime_part(paste('<!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"/>
</head>
<body><pre>', paste(pander.return(results, style = "multiline"), collapse = '\n'), '</pre></body>
</html>'))

由于 sendmailR 中的错误,我们必须将 Content-type 覆盖为 HTML:

msg_content[["headers"]][["Content-Type"]] <- "text/html"

现在它已准备好通过您在示例中使用的注释发送,结果是:

Pander markdown table in HTML mail

该表在任何其他支持 HTML 的电子邮件客户端中看起来应该同样良好。请注意,如果这样更适合您的需求,您也可以使用 HTML 表格而不是 Markdown。

关于r - 列宽与使用 sendmailr 从 R 发送的 pander 表中的表数据不对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27698252/

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