I think my tweet speaks for itself:
Words can not express how excited I am to use this :D— Christopher Yee (@Eeysirhc) March 10, 2020
The goal of this article is to document how to send #rstats code and plots directly to Slack.
library(slackr) library(slackteams) library(slackreprex)
You can easily grab that from this guide here.
Slack Key ID
To retrieve your Slack key ID, login here and then follow the prompts.
API token & webhook
Last but not least, we can now use our newfound credentials and insert them into the following URL:
The end result should provide the last pieces of our puzzle for the API token, webhook and the assigned channel for the Slack key ID.
slackrSetup(channel = "#thinktank", incoming_webhook_url = "https://hooks.slack.com/services/0123456789", api_token = "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
Interacting from R
We’re now ready for a toast test:
slackr("toast test from R")
Even though we selected a specific channel we can easily switch to a different one without going through the entire process again:
slackr("toast test from R", channel = "#warroom")
Sending a plot
Let’s try to recreate a plot I saw awhile back on SEO twitter.
library(dplyr) library(ggplot2) technical <- tibble(website_size = seq(0, 100, 1), importance = seq(0, 100, 1)) %>% mutate(segment = "technical") content <- tibble(website_size = rev(seq(0, 100, 1)), importance = seq(0, 100, 1)) %>% mutate(segment = "content") df <- rbind(technical, content) p <- df %>% ggplot(aes(website_size, importance, color = segment)) + geom_point() + geom_line() + labs(color = NULL) + theme_light() + theme(legend.position = 'top')
Making sure the plot does what we want…
…and then beam it up over to Slack:
Nearly 85% of my work communications (internal & client-facing) is completed in Slack so I can think of a few “real world” use cases for this:
- Automated daily, weekly, monthly reporting
- Incorporate analyses & insights then publish results directly to Slack
- Ping the appropriate channels when performance surpasses a statistical threshold
- Sharing code or final data output without jumping through hoops