【发布时间】:2018-05-08 15:00:15
【问题描述】:
与this question相关。
我想构建一个自定义管道%W>%,它可以使一个操作的警告静音
library(magrittr)
data.frame(a= c(1,-1)) %W>% mutate(a=sqrt(a)) %>% cos
将等同于:
w <- options()$warn
data.frame(a= c(1,-1)) %T>% {options(warn=-1)} %>%
mutate(a=sqrt(a)) %T>% {options(warn=w)} %>%
cos
这两次尝试都不行:
`%W>%` <- function(lhs,rhs){
w <- options()$warn
on.exit(options(warn=w))
options(warn=-1)
lhs %>% rhs
}
`%W>%` <- function(lhs,rhs){
lhs <- quo(lhs)
rhs <- quo(rhs)
w <- options()$warn
on.exit(options(warn=w))
options(warn=-1)
(!!lhs) %>% (!!rhs)
}
我怎样才能将rlang 变成有效的东西?
【问题讨论】:
-
赞成将
rlang用作动词。 -
您可能想看看
rmonad::包intro vignette(和其他)。这是一种处理错误的好方法,并且可能同样适用于警告。可能有点矫枉过正,但需要考虑。 -
确实很有趣。它甚至可能包含我这个老问题的答案:stackoverflow.com/questions/44831342/…