有没有一种方法可以在不手动执行的情况下在每个步骤中输出管道的结果? (例如,不选择并仅运行选定的块)
我经常发现自己逐行运行一个管道,以记住它在做什么或何时进行分析。
例如:
library(dplyr)
mtcars %>%
group_by(cyl) %>%
sample_frac(0.1) %>%
summarise(res = mean(mpg))
# Source: local data frame [3 x 2]
#
# cyl res
# 1 4 33.9
# 2 6 18.1
# 3 8 18.7
我选择并运行:
mtcars %>% group_by(cyl)
然后...
mtcars %>% group_by(cyl) %>% sample_frac(0.1)
等等...
但是在
CMD/CTRL
中选择和ENTER
+ RStudio
仍然需要更有效的方法。可以用代码完成吗?
是否有一个函数可以使用管道并逐行运行/消化它,以显示控制台中每个步骤的输出,因此您可以像在包指南的
demos(...)
或examples(...)
中那样按Enter继续操作
最佳答案
magrittr功能链很容易。例如,使用以下命令定义函数my_chain
:
foo <- function(x) x + 1
bar <- function(x) x + 1
baz <- function(x) x + 1
my_chain <- . %>% foo %>% bar %>% baz
并得到链的最终结果为:
> my_chain(0)
[1] 3
您可以使用
functions(my_chain)
获取功能列表并定义一个“ stepper”函数,如下所示:
stepper <- function(fun_chain, x, FUN = print) {
f_list <- functions(fun_chain)
for(i in seq_along(f_list)) {
x <- f_list[[i]](x)
FUN(x)
}
invisible(x)
}
并使用插入的
print
函数运行链:stepper(my_chain, 0, print)
# [1] 1
# [1] 2
# [1] 3
或等待用户输入:
stepper(my_chain, 0, function(x) {print(x); readline()})
关于r - 逐步完成具有中间结果的管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30119628/