Tubo personalizado para silenciar advertencias

Relacionado conesta pregunta.

Me gustaría construir una tubería personalizada%W>% eso silenciaría las advertencias para una operación

library(magrittr)
data.frame(a= c(1,-1)) %W>% mutate(a=sqrt(a)) %>% cos

será equivalente a:

w <- options()$warn
data.frame(a= c(1,-1)) %T>% {options(warn=-1)} %>%
  mutate(a=sqrt(a))    %T>% {options(warn=w)}  %>%
  cos

Estos dos intentos no funcionan:

`%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)
}

Cómo puedorlang esto en algo que funciona?

Respuestas a la pregunta(4)

Su respuesta a la pregunta