r - 根据 tibble 中的数据发送电子邮件
问题描述
我正在尝试迭代 tibble 以从每一行发送电子邮件,但无法使其正常工作。这是示例:
包
library(tidyverse)
library(sendmailR)
library(pander)
首先创建我想包含在电子邮件中的表
tbl <- tibble(A = c(1,2,3),
B = c(4,5,6),
C = c(7,8,9))
table <- pander_return(tbl)
创建 tibble,每列对应我要包含到电子邮件的某些信息
emails <- tibble(from = c("jane.doe@gm.com", "john.doe@gm.com"),
to = c("jane.doe@gm.com", "john.doe@gm.com"),
subject = "This is test",
greetings = "Happy Christmas",
data = list(table, table))
现在我想将map
每一列添加到正确的位置以sendmail
从 sendmailR 包中运行。这是我如何发送 1 封电子邮件的示例。唯一有趣的是如何greetings
将table
它们连接在一起以创建 msg 字段。
from <- "jane.doe@gm.com"
to <- "jane.doe@gm.com"
subject <- "This is test"
msg <- c(greetings, table)
sendmailR::sendmail(from = from, to = to, subject = subject, msg = msg)
那么我怎样才能将这些电子邮件映射到sendmail
功能上,以便每一行都发送电子邮件。
解决方案
这是pmap
函数的完美用例purrr
您可以执行以下操作
pmap( list(emails$from, emails$to, emails$subject, emails$data)
, ~sendmailR::sendmail(from = ..1,
to = ..2,
subject = ..3,
msg = ..4))
这会创建一个参数列表,然后使用 ~ 我们定义函数。..x
表示参数出现在输入列表中的顺序。
完全代表
library(tidyverse)
library(sendmailR)
library(pander)
tbl <- tibble(A = c(1,2,3),
B = c(4,5,6),
C = c(7,8,9))
table <- pander_return(tbl)
emails <- tibble(from = c("jane.doe@gm.com", "john.doe@gm.com"),
to = c("jane.doe@gm.com", "john.doe@gm.com"),
subject = "This is test",
greetings = "Happy Christmas",
data = list(greetings, table))
pmap( list(emails$from, emails$to, emails$subject, emails$data)
, ~sendmailR::sendmail(from = ..1,
to = ..2,
subject = ..3,
msg = ..4))
并且只是为了表明它适用于较低风险的功能:
pmap( list(emails$from, emails$to, emails$subject, emails$data)
, ~paste(..1,
..2,
..3))
输出:
[[1]]
[1] "jane.doe@gm.com jane.doe@gm.com This is test"
[[2]]
[1] "john.doe@gm.com john.doe@gm.com This is test"
推荐阅读
- python - 无法检查输入的值是否在列表中(尝试作为检查字符串)
- python - 事件 onclick() Matplotlib 生成数据
- google-apps-script - 如何检查用户是否没有在 Google 表格的提示框中输入任何值
- powershell - 为什么这个 API 请求脚本在恰好 100 个请求时失败?
- sql - GA PagePath 正则表达式
- odoo - 使用第三方模块在 Odoo 中集成任何网站
- reactjs - 当它是后端的工作时,为什么 redux 站在前端的肩膀上?
- conv-neural-network - yolo为什么要用MSE
- flutter - 未处理的异常:在构造函数中调用了 setState():
- android - Android 仅捕获与网络相关的异常