如何将数据帧拆分为R

时间:2016-11-08 08:04:27

标签: r

我正在编写一个函数来向R中的客户发送电子邮件。我使用mailR包这样做,但我的服务提供商只允许我每小时发送100封电子邮件。我想要做的是,如果假设我的电子邮件列表包含270个电子邮件地址,我想将其溢出到chunk1=100 , chunk2 = 100 & chunk3 = 70然后它应该发送电子邮件到第一个块然后等待一个小时然后chunk2,依此类推。 这是我的功能。

email <- function(dataframe,city,date){
   dataframe$registrant_email <- tolower(dataframe$registrant_email)
   dataframe_city <- dataframe[dataframe$registrant_city == city & dataframe$create_date == date, ]
   # Removing NA's and blank email ids
   dataframe_city <- dataframe_city[!(is.na(dataframe_city$registrant_email)|dataframe_city$registrant_email==""), ]
   # Removing duplicate email ids
   dataframe_city <-dataframe_city[!duplicated(dataframe_city$registrant_email),]
   emails <- as.vector(dataframe_city$registrant_email)
   if(length(emails) > 100){

   # divide the vector into chunks of 100


   } else{send_email(emails}

  return(emails) 
}

我需要if loop中的帮助如何将拆分部分写入100块,然后调用send_email函数等待一小时,依此类推。

1 个答案:

答案 0 :(得分:2)

您可以将电子邮件矢量拆分为一个包含一行的列表:

mailinglist <- split(emails, ceiling(seq_along(emails)/100))

然后你可以通过以下方式延迟邮件的执行:

for(i in mailinglist) {
 send_email(i)
 Sys.sleep(3600)}

我通过一个简单的mean()调用来测试循环并且它有效,但你应该用较短的时间自己测试并通过发送邮件给自己。

编辑:要省略上次迭代的延迟,请使用:

for(i in 1:length(mailinglist)) {
 if(i < length(mailinglist)) {
  send_email(mailinglist[[i]])
  Sys.sleep(3600)}
 else {
  send_email(mailinglist[[i]])}
}