簡體   English   中英

根據 tibble 中的數據發送電子郵件

[英]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 封電子郵件的示例。 唯一有趣的一點是greetingstable如何連接在一起以創建 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函數,以便每行發送電子郵件。

這是來自purrrpmap函數的完美用例

您可以執行以下操作

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM