r - R:使用 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 打印消息“完成!” 完成后。
如果您有其他建议(我已经看到关于 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。
推荐阅读
- db2 - SSRS-连接IBM DB2(AS400)作为数据源时如何根据参数值改变查询
- git - 涂抹和清洁过滤器,涂抹工作,清洁不
- javascript - 在共享主机上部署 nodejs 文件
- three.js - 如何使用键盘或按钮单击在三个 js 中移动、旋转和缩放轨迹球控件
- scala - 阶乘函数递归计算中的Scala代码有时会抛出stackoverflow异常有时运行良好
- windows - uwp,如何访问本地数据目录
- swift - 如何在 Swift 中使用具有隐式/强制展开的移位运算符
- loops - 在 Lisp 中完成循环的非循环、非变异方式?
- python - 无法使用使用 Python 编写的 Robot Framework 自定义库
- javascript - 获取所有 CSS 类的背景和颜色属性值