基本应用于R数据帧(也可用于循环)

时间:2015-03-24 03:19:25

标签: r for-loop apply

我试图在基本数据框架上做一些工作,你可以在下面看到:

> print(thisEmailList)
          user_name            user_email
1         Test, Joe    joejoejt@gmeel.com
2 adminintor, Admin jimmyadminj@gmeel.com

我想向这些人发送一些电子邮件,但我不确定什么是最好的方法。我有一个函数sendmail,它似乎可以正常使用字符串,但是如何迭代或将此函数应用于我的数据帧? 我已经尝试了许多不同的技巧,for循环和lapply中的函数,但我似乎无法让它以与数据库发布相同的方式出现。我似乎总能得到这样的效果:

          user_name
1         Test, Joe
2 adminintor, Admin
             user_email
1    joejoejt@gmeel.com
2 jimmyadminj@gmeel.com

我认为thisEmailList是行和列,我想循环遍历行,而不是列。 R在如何思考方面有很大的不同,我只是没有得到语法,或者我如何向上面的每一行发送电子邮件。

更新1

我想我终于弄明白了,无论如何都是forloop。如果有人有一个没有涉及for循环的建议,那就太棒了。

for (i in 1:nrow(thisEmailList)){
    #Note this is just for testing, the sendmailr part has never been an issue, just getting the row/columns to loop in the right order.
    print(paste(thisEmailList[i,2], thisEmailList[i,1]))
}
[1] "joejoejt@gmeel.com Test, Joe"
[1] "jimmyadminj@gmeel.com adminintor, Admin"

1 个答案:

答案 0 :(得分:2)

您希望在行模式下使用基本apply函数(第二个参数为1):

apply(data.frame(thisEmailList$user_name, thisEmailList$user_email),
      1,
      function(x) {
          # send email to user x[1]
          # whose email address is x[2] )
      })

您不能使用apply内的常规数据框列引用,因此我创建了一个临时输入数据框,其第一列(x[1])是user_name并且其第二列(x[2])是user_email