[英]Send emails based on data in 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
每一列並將其添加到 sendmailR 包中sendmail
函數的正確位置。 這是我如何發送 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
函數,以便每行發送電子郵件。
這是來自purrr
的pmap
函數的完美用例
您可以執行以下操作
pmap( list(emails$from, emails$to, emails$subject, emails$data)
, ~sendmailR::sendmail(from = ..1,
to = ..2,
subject = ..3,
msg = ..4))
這將創建一個參數列表,然后使用 ~ 我們定義函數。 ..x
表示參數在輸入列表中出現的順序。
完全reprex
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.