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!")
}
然而,这给出了一个错误。
我想使用循环的原因有两个:
- 我希望 R 在开始下一次迭代之前暂停一下(我不知道这是否真的有必要,但如果我的数据框有超过一百封邮件,那可能会更好——我在这里可能是错的).
- 我希望 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。
我有一个姓名和邮件的数据框,我想创建一个循环,在该循环中,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!")
}
然而,这给出了一个错误。
我想使用循环的原因有两个:
- 我希望 R 在开始下一次迭代之前暂停一下(我不知道这是否真的有必要,但如果我的数据框有超过一百封邮件,那可能会更好——我在这里可能是错的).
- 我希望 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。