说我有一个数据集,我想使用管道语法几个过滤器适用于它,像这样:如何重写magrittr管道运算符?
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。问题是,是否有可能以最小的努力达到所需的行为,即不修补内部零件?
我不得不承认整个想法有点令人不安,但是我的实际情况稍微复杂一点,我想通过一个简单的开/关开关隐藏一些调试/开发细节用于演示目的。
如果我没有理解好了,你想打印的nrow在输出管道的每一步? –
@ColinFAY不完全;只有在使用'%<>%'进行重新分配时才会发生,并且无需在每个地方添加额外的管道步骤,如'%>%nrow'。 – tonytonov
可能相关:[rmonad](https://cran.r-project.org/web/packages/rmonad/index.html) –