假设我有一个数据集,希望使用管道语法应用多个过滤器:
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
标志,我将控制整个流程的跟踪过程。显然,由于内部评估机制,情况并不那么简单,如此处提示(链接)。问题是,是否可能以最小的努力实现所需的行为,即在不修补 magittr
内部的情况下进行操作?我必须承认整个想法有点令人不安,但我的实际场景更加复杂,并且我想通过一个简单的开关来隐藏一些调试/开发细节以供演示目的。
%<>%
重新赋值时才会发生,而且不需要在每个地方都添加额外的管道步骤,比如%>% nrow
。 - tonytonov