Slackr无法在函数

时间:2015-07-29 14:34:54

标签: r slack-api

我正在使用slackr包将消息发布到Slack。我有以下代码在函数外部(即将两个消息发布到Slack)时有效,但在函数内部使用时,使用函数外部的变量值,而不是在函数内设置。

一个例子将有助于说明。

> n = 2
> 
> # Run a loop, send to slack.  Display content.
> aMsg <- NULL
> for ( i in 1:n ) {
+   msg <- NULL
+   msg <- paste0("Completed ", i, " iteration from loop @ ", Sys.time())
+   aMsg <- c(aMsg, msg)
+   slackr(paste(msg))
+ }
> slackr(aMsg[1], aMsg[2])
> 
> aMsg
[1] "Completed 1 iteration from loop @ 2015-07-29 10:12:45"
[2] "Completed 2 iteration from loop @ 2015-07-29 10:12:46"
> SendToSlack <- function(n) {
+   
+   slackr("Now post to Slack from function")
+   aMsg <- NULL
+   for ( i in 1:n ) {
+     msg <- NULL
+     msg <- paste0("Completed ", i, " iteration from function @ ", Sys.time())
+     aMsg <- c(aMsg, msg)
+     slackr(paste(msg))
+   }
+   slackr(aMsg[1], aMsg[2])
+   return (aMsg)
+   
+ }
> 
> output <- SendToSlack(n)
> output
[1] "Completed 1 iteration from function @ 2015-07-29 10:13:04"
[2] "Completed 2 iteration from function @ 2015-07-29 10:13:04"
> 

从上面的代码片段中,我预计会有两个来自函数外部循环的消息,然后是循环后调用slackr()的两条消息。最小:输出中的秒数将是12:45,12:46然后12:45再次12:46。

从调用函数开始,我再次期望函数中的循环有两条消息,然后是循环后调用slackr()的两条消息。分:秒应该是13:04,13:04然后是13:04,13:04。

附加图像是我实际在Slack中获得的输出。循环按预期工作,但由于某种原因从函数调用slackr()使用调用函数之前的变量值(即函数根本不更改msg和aMsg)。但是,slackr会将字符串'Now post to Slack from function'发布到Slack函数中。

任何人都知道这里发生了什么?与全球环境有关?很奇怪!

Slack Output

1 个答案:

答案 0 :(得分:1)

新版本解决了问题,由@hrbrmstr

提供