Я строю функцию, в которой основным аргументом могут быть разные вещи, например, формула, функция или лямбда-функция, и она должна обрабатывать вещи соответственно.
library(rlang)
my_func=function(x){
if(is_function(x))
return("X is a function")
else if(is_lambda(x))
return("X is a lambda")
else if(is_formula(x))
return("X is a formula")
else
return("X is something else")
}
my_func(x=is.numeric) #function
my_func(x=A~B) #formula
my_func(x=~is.numeric(.x)) #formula too :'(
my_func(x="foo") #something else
Как вы можете видеть rlang::is_lambda
не распознал лямбда-функцию. В примере файла справки они сначала используют as_function
(is_lambda(as_function(x))
), но это приводит к ошибке преобразования, когда x
не является формулой лямбда-функции. Я бы предпочел не использовать trycatch
, если это возможно, поскольку я нахожу, что это иногда приводит к нечитаемому коду и скрытым ошибкам.
Как я могу просто протестировать этот случай?