【发布时间】:2017-07-21 11:11:15
【问题描述】:
假设我有一个数据集,我想使用管道语法对其应用多个过滤器,如下所示:
library(magrittr)
library(dplyr)
mtcars %<>%
filter(cyl == 4) %>%
select(cyl, mpg)
nrow(mtcars)
#[1] 11
我在每个这样的步骤之后用nrow检查数据集的当前状态,所以我想我可以覆盖管道%<>%操作符
`%<?>%` <- function(lhs, rhs) {
x <- magrittr::`%<>%`(lhs, rhs)
if (is.data.frame(x) & pipeVerbose) print(nrow(x))
}
#Using this will generate errors like
#Error in pipes[[i]] : subscript out of bounds
现在通过打开或关闭pipeVerbose 标志,我将控制整个流程的跟踪过程。显然不是那么简单,因为内部评估机制,提示here。问题是,是否有可能以最小的努力实现所需的行为,即不修补 magittr 内部?
我不得不承认整个想法有点令人不安,但我的实际情况有点复杂,我想通过一个简单的开/关开关隐藏一些调试/开发细节以进行演示。
【问题讨论】:
-
如果我理解得很好,您想在管道的每个步骤上打印 nrow 的输出吗?
-
@ColinFAY 不完全;仅当使用
%<>%重新分配时,并且没有在任何地方附加额外的管道步骤,例如%>% nrow。 -
可能相关:rmonad