在我的R脚本中,我希望在不中断管道的情况下,在一个长管道的中间打印一条消息(这需要很长时间才能运行).我需要这个来跟踪正在运行的管道的进度.
我try 创建一个简单的函数,在不中断管道的情况下打印消息:
CatPipe <- function(x, message = NULL) {
cat(message, sep = "\n")
return(x)
}
下面是一个实现示例:
require(dplyr)
mtcars %>%
CatPipe("Hello1") %>%
{
Sys.sleep(1)
.
} %>%
CatPipe("Hello2") %>%
{
Sys.sleep(1)
.
} %>%
head(5) %>%
CatPipe("Hello3")
然而,打印的信息并不像预期的那样.无论当前步骤是否完成,消息都以相反的顺序打印!
Hello3
Hello2
Hello1
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
对此有什么解释吗?我应该对函数进行任何更改吗?有没有使用dplyr
、magrittr
或类似包的替代方案?