【问题标题】:Apply own function with three inputs to dataframe将具有三个输入的自己的函数应用于数据框
【发布时间】:2020-02-18 09:43:43
【问题描述】:

我有这个通过库发送邮件的功能,RDCOMClient。我之前使用过它,两个输入都来自使用purrr 中的map2 函数的数据帧。

现在我已将函数扩展为包含三个输入,但我似乎无法将其正确应用于数据帧。

我的数据是这样的:

df <- data.frame(Name = c("Name 1", "Name 2"),
                 Old_mail = c("Old mail 1", "Old mail 2"),
                 New_mail = c("New mail 1", "New mail 2"))

还有我的功能:

library(RDCOMClient)
mail_fun <- function(name, old_mail, new_mail){

  # Open Outlook
  OutApp <- COMCreate("Outlook.Application")

   # Create mail
  outMail = OutApp$CreateItem(0)

  # Set receiver
  outMail[["To"]] = as.character(new_mail)

  # Set subject
  outMail[["subject"]] = "Some subject"

  # Set body
  outMail[["body"]] = paste(

"Dear ", name,

" \n \nBla bla bla", old_mail, "bla bla bla", sep="")

  # Send mail
  outMail$Send()

  # Pause for a second
  Sys.sleep(1)

}

现在我想将函数应用到每一行,这样Name 1Old mail 1New mail 1 分别用于nameold_mailnew_mail,分别用于第一次迭代等第四次。

据我所知,我必须使用pmap 函数。我只是不知道怎么做。

提前致谢!

此致,

埃米尔·布利彻

【问题讨论】:

  • 它创建了一个所谓的 COM 对象。基本上,它告诉 R “打开” Outlook”。

标签: r functional-programming purrr rdcomclient


【解决方案1】:

函数参数名称应与数据框列名称匹配

COM <- function(Name, Old_mail, New_mail) {
           #browser()
           paste(Name, Old_mail, New_mail)
}

purrr::pmap(df, COM)
[[1]]
[1] "Name 1 Old mail 1 New mail 1"

[[2]]
[1] "Name 2 Old mail 2 New mail 2"

【讨论】:

  • 我现在意识到数据框中的列名必须与函数中的名称相同。我有点尴尬,它是如此微不足道。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2018-03-21
相关资源
最近更新 更多