r - 逐步完成具有中间结果的管道

标签 r dplyr magrittr

有没有一种方法可以在不手动执行的情况下在每个步骤中输出管道的结果? (例如,不选择并仅运行选定的块)

我经常发现自己逐行运行一个管道,以记住它在做什么或何时进行分析。

例如:

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/

相关文章:

r - 如何摆脱错误 : Tibble columns must have compatible sizes?

r - 如果一列中的值重复,如何将另一列的某些值提取到新列中?

R中数据的行比较

r - 如何编写自定义管道友好函数?

string - 从 data.frame 中的日期中删除斜杠

R:将二进制分类变量转换为长数据格式

R 包失败 devtools::check,因为 "could not find function"即使函数是在 NAMESPACE 中导入的

r - 使用 purrr::map 将多个参数应用于函数

R:通过管道输入到函数工厂

r - 通过字符串匹配从其他数据框中查找特定值