Slackr 不在函数内部工作
Slackr not working from within function
我正在使用 slackr 包 post 向 Slack 发送消息。我有以下代码在函数外部工作(即 posts 两条消息,两次,到 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() 时收到两条消息。输出中的 min:seconds 将是 12:45、12:46,然后是 12:45、12:46。
从对函数的调用中,我会再次期待来自函数内循环的两条消息,然后是来自循环后对 slackr() 的调用的相同两条消息。 min:seconds 应该是 13:04、13:04,然后是 13:04、13:04。
所附图片是我在 Slack 中实际得到的输出。循环按预期工作,但由于某种原因从函数调用 slackr() 使用函数调用前的变量值(即 msg 和 aMsg 根本没有被函数更改)。但是,slackr 从函数中 post 字符串 'Now post to Slack from function' 到 Slack。
有人知道这里发生了什么吗?与全球环境有关?很奇怪!
新版本解决了这个问题,由@hrbrmstr提供
我正在使用 slackr 包 post 向 Slack 发送消息。我有以下代码在函数外部工作(即 posts 两条消息,两次,到 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() 时收到两条消息。输出中的 min:seconds 将是 12:45、12:46,然后是 12:45、12:46。
从对函数的调用中,我会再次期待来自函数内循环的两条消息,然后是来自循环后对 slackr() 的调用的相同两条消息。 min:seconds 应该是 13:04、13:04,然后是 13:04、13:04。
所附图片是我在 Slack 中实际得到的输出。循环按预期工作,但由于某种原因从函数调用 slackr() 使用函数调用前的变量值(即 msg 和 aMsg 根本没有被函数更改)。但是,slackr 从函数中 post 字符串 'Now post to Slack from function' 到 Slack。
有人知道这里发生了什么吗?与全球环境有关?很奇怪!
新版本解决了这个问题,由@hrbrmstr提供