說我有一個數據集,我想使用管道語法幾個過濾器適用於它,像這樣:如何重寫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) –