R:使用 RDCOMClient 循环两个变量

R: Looping over two variables with RDCOMClient

我有一个姓名和邮件的数据框,我想创建一个循环,在该循环中,R 使用 RDCOMClient 库向所有这些人发送邮件,但使用他们各自的姓名。 数据框为

df <- data.frame("Name" = c("Name1", "Name2"), "Mail" = c("mail1@mail.com", "mail2@mail.com"))

因为我刚刚在一个考试项目中使用了Python,所以我创建了多次带有多个变量的循环,例如:

for i,j in zip(df[1], df[2])

我的代码最好是这样的


for (mail in df$Mail, name in df$Name) {

  outApp <- COMCreate("Outlook.Application")
  outMail = outApp$CreateItem(0)

  outMail[["To"]] = mail
  outMail[["subject"]] = "Subject"
  outMail[["body"]] = paste(" Dear", name, "\n \n bla bla bla.")

  outMail$Send()

  Sys.sleep(0.5)

  if (mail == df$Mail[-1]) cat("Done!")
}

然而,这给出了一个错误。

我想使用循环的原因有两个:

  1. 我希望 R 在开始下一次迭代之前暂停一下(我不知道这是否真的有必要,但如果我的数据框有超过一百封邮件,那可能会更好——我在这里可能是错的).
  2. 我希望 R 在完成后打印消息 "Done!"。

如果您有其他建议(我在 lapply、sapply 等软件包上看到过一些建议),非常欢迎!

我希望有人知道该怎么做。

提前致谢,

埃米尔

我无法重现你的问题,因为我不在 windows 但这里有一个使用包 mailR.

的例子
library(mailR)
library(purrr)
df <- tibble("Name" = c("Name1", "Name2"), "Mail" = c("mail1@mail.com", "mail2@mail.com"))

mail_fun <- function(name, mail){
send.mail(from = "sender@gmail.com",
          to = mail,
          subject = "Subject of the email",
          body = paste(" Dear", name, "\n \n bla bla bla."),
          smtp = list(host.name = "aspmx.l.google.com", port = 25),
          authenticate = FALSE,
          send = TRUE)

  Sys.sleep(0.5)

  print("Done!")

}

mail_fun("filip", "filip.wastberg@ferrologic.se")

map2(df$Name, df$Mail, ~mail_fun(name = .x, mail = .y))

这应该让您全面了解如何将代码放入函数中,然后使用 purrr 迭代 data.frame。