基本应用于R数据帧(也可用于循环)
我正在尝试对基本数据帧进行一些工作,您可以在下面看到:基本应用于R数据帧(也可用于循环),r,for-loop,apply,R,For Loop,Apply,我正在尝试对基本数据帧进行一些工作,您可以在下面看到: > print(thisEmailList) user_name user_email 1 Test, Joe joejoejt@gmeel.com 2 adminintor, Admin jimmyadminj@gmeel.com 我想给这些人发一些电子邮件,但我不确定什么是最好的方法。我有一个函数sendmail,它似乎可以很好地处理字符串,但如何迭代或将此函数应用
> print(thisEmailList)
user_name user_email
1 Test, Joe joejoejt@gmeel.com
2 adminintor, Admin jimmyadminj@gmeel.com
我想给这些人发一些电子邮件,但我不确定什么是最好的方法。我有一个函数sendmail,它似乎可以很好地处理字符串,但如何迭代或将此函数应用于我的数据帧?
我在Lappy中尝试了许多不同的技巧,用于循环和函数,但我似乎无法让它以数据库显示的方式显示。我似乎总是有这样的想法:
user_name
1 Test, Joe
2 adminintor, Admin
user_email
1 joejoejt@gmeel.com
2 jimmyadminj@gmeel.com
我将此电子邮件列表视为行和列,我希望循环遍历行,而不是列。R在思考方式上有很大的不同,我只是不明白语法,也不知道如何向上面的每一行发送电子邮件
更新1
我想我终于明白了,不管怎样。如果有人有一个不涉及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"
您希望在行模式下使用基本的
apply
功能(第二个参数为1):
您不能在
apply
中使用普通数据框列引用,因此我创建了一个临时输入数据框,其第一列(x[1]
)是用户名,第二列(x[2]
)是用户的电子邮件吗
向我们显示您用于发送一封具有特定名称和电子邮件选择的电子邮件的代码,我们可以向您展示如何自动发送。您的解决方案可行,但除非您别无选择,否则您通常应尽量避免在R
中循环。^不一定正确。你应该做最有效的事情谢谢你的回复Tim,我只输入了一个简单的打印(x$user\u email)语句,我得到了以下错误:x$user\u email中的错误:$operator对atomic无效vectors@TimothyHarding我清理了我的代码,请看一看。好名字,顺便说一下^^谢谢蒂姆!你也是!,我给了它一个快照(暂时跳过sendmailr部分)打印(粘贴0(x[1],x[2]),它打印出您期望的:[1]”测试,Joejoejoejt@gmeel.com“[1]”管理员,Adminjimmyadminj@gmeel.com“[1]”测试,Joejoejoejt@gmeel.com”“管理员,Adminjimmyadminj@gmeel.com,但它再次添加第三行和所有值,我被第三行搞糊涂了。您在最后一行看到的输出只是R
控制台的一个工件。我检查了apply
函数,它实际上只在数据帧中的每一行上迭代一次。所以你可以忽略最后一行,你也可以只使用一个矩阵,因为apply无论如何都会把这个数据框变成一个矩阵
apply(data.frame(thisEmailList$user_name, thisEmailList$user_email),
1,
function(x) {
# send email to user x[1]
# whose email address is x[2] )
})