R: Цикл по двум переменным с RDCOMClient - PullRequest
0 голосов
/ 27 мая 2019

У меня есть фрейм данных имен и писем, и я хотел бы создать цикл, в котором 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 напечатал сообщение "Готово!"когда это будет сделано.

Если у вас есть другие предложения (я видел несколько рекомендаций по пакетам lapply, sapply и т. д.), они очень приветствуются!

Я надеюсь, что кто-то естькто знает, что делать.

Заранее спасибо,

Эмиль

1 Ответ

0 голосов
/ 27 мая 2019

Я не могу воспроизвести ваш вопрос, потому что я не на 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 для перебора элемента данных.

...