懈怠堕落
使用R发送Slack消息听起来像是个骗人的把戏,但实际上在很多情况下,这可能派上用场。 我使用Slack将图表发送给同事,以显示最新的Web分析趋势。 当冗长的R脚本完成运行时,您还可以使用Slack通知自己或其他人。
Bob Rudis创建了R包slackr ,它使通过R轻松发送Slack消息变得容易。它位于CRAN上,因此可以使用install.packages("slackr")
。
到目前为止,使用Slackr最复杂的部分是初始设置。 幸运的是,您只需要执行一次。
您需要授权R使用您的特定Slack。 Bob显示了一个示例配置文件,格式如下:
api_token: YOUR_FULL_API_TOKEN
channel: #general
username: slackr
incoming_webhook_url: https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX
因此,您需要一个API令牌和一个传入的Webhook URL。 Slack的开发人员文档可能很难找到。 事实证明,无论您要发送什么消息,您都想创建一个新的Slack应用程序。
转到api.slack.com/apps ,然后单击绿色的“创建新应用”按钮。
沙龙·马克斯(IDG)作为将R设置为与Slack工作空间一起使用的一部分,创建一个Slack应用程序。
接下来,选择传入的Webhooks。
沙龙·马克斯(IDG)将Webhook添加到新的Slack应用。
然后,您会看到一个激活它们的选项。
沙龙·马克斯(Sharon Machlis)在Slack应用上切换到活动的Webhooks。
最后,向下滚动并添加一个新的webhook。 系统将询问您要发布到哪个频道。 不用担心,您可以覆盖它-您不需要为每个通道使用新的钩子。 选择一个默认通道,然后单击“安装”。 您可以在本文顶部的视频中看到所有这些步骤。
启用webhook之后,将生成的webhook URL复制到R Slack配置文件中。 并确保您的配置文件是纯文本文件而不是R脚本。
您还需要一个API令牌。 Slack的“旧版”令牌可用于此目的。 Slack会闪烁许多警告,建议您不要使用它们,但实际上,它们确实使您将R连接到Slack。
要获取旧版令牌,请访问api.slack.com/custom-integrations/legacy-tokens 。 您应该看到该页面上列出了Slack工作空间。 单击创建令牌按钮,然后将令牌字符串复制到您的授权文件中。
松弛设置完成。
下一步:将slackr配置为使用授权文件。 该部分更加简单,需要使用slackr_setup()
函数编写一行代码。
slackr_setup()
默认在您的主目录中包含一个名为.slackr的文件。 如果要在其他位置使用另一个文件,请将其名称(包括完整的文件路径,如果它不在您的工作目录中)添加到slackr_setup()
。 在下面的代码中,我在当前项目目录中使用的文件名为.morewithr_slack。
slackr_setup(config_file = ".morewithr_slack")
您需要在使用slackr的每个会话的开始时运行slackr_setup()
函数和任何必要的参数。
最后,有趣的部分:发送消息和文件。
下面,我用当前的系统日期和时间创建了一个简单的文本字符串,并将其保存到变量my_message
。 要将其发送到Slack,我将slackr_msg()
函数与消息文本的第一个参数以及通道的第二个参数一起使用。
my_message <- paste("I'm sending a Slack message at", Sys.time(), "from my R script.")
slackr_msg(my_message, channel = "#slack-from-r")
请注意,频道名称前面有一个井号。 如果您想向某人发送私人消息,请将该频道设置为他们的Slack名称,并在其前面加上@符号。
slackr_msg(paste("Now I'm sending a private message at",
Sys.time()), channel = "@sharon_machlis")
使用slackr_upload()
命令发送图像或其他文件也很容易。 就像我在上一集“用R做更多事”( “如何从R和Gmail发送电子邮件” )中所做的一样,我将创建一个美国月度失业数据图,并将其保存到失业码文件.png中。 (这不是重要的部分。我只需要中断mtcars和虹膜样本数据。)
下面的代码首先将文本消息发送到Slack,然后上传文件。
pacman::p_load(quantmod, glue, xts, dplyr, ggplot2)
getSymbols("UNRATE", src="FRED")
unemployment <- coredata(UNRATE)
month_starting <- index(UNRATE)
series_length <- length(unemployment)
latest_msg <- glue("The latest US unemployment rate was {unemployment[series_length]},
in the month starting {month_starting[series_length]}.
That's {unemployment[series_length] - unemployment[series_length - 1]}
percentage points difference from the prior month.")
un_df <- data.frame(month_starting, unemployment) %>%
filter(month_starting >= as.Date("2000-01-01")) %>%
rename(unemployment = UNRATE)
mygraph <- ggplot(un_df, aes(month_starting, unemployment)) +
geom_line() +
ggtitle("US Monthly Unemployment") +
xlab("Month Starting") +
ylab ("")
ggsave("unemployment_graph.png")
msg_text <- glue("The latest US unemployment rate was {unemployment[series_length]}, in the month starting {month_starting[series_length]}. That's {unemployment[series_length] - unemployment[series_length - 1]} percentage points difference from the prior month. Here's a graph of the data since January 2000:")
slackr_msg(msg_text, channel = "#slack-from-r")
slackr_upload("unemployment_graph.png",
"US Monthly Unemployment Since Jan 2000",
channels = "#slack-from-r")
在那里,您可以:直接从R脚本获得Slack消息。
有关R的更多技巧,请访问InfoWorld上的“用R做更多”视频页面,或查看YouTube播放列表“用R做更多” 。
翻译自: https://www.infoworld.com/article/3402657/how-to-slack-from-r.html
懈怠堕落