gpt4 book ai didi

r - 如何测试变量是否包含 lambda 函数?

转载 作者:行者123 更新时间:2023-12-04 10:24:09 26 4
gpt4 key购买 nike

我正在构建一个函数,其中主要参数可以是各种事物,例如一个公式、一个函数或一个 lambda 函数,它必须相应地处理事情。

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无法识别 lambda 函数。在帮助文件示例中,他们使用 as_function首先( is_lambda(as_function(x)) ),但是当 x 时会引发转换错误不是 lambda 函数公式。我宁愿不使用 trycatch如果可能的话,我发现它有时会导致不可读的代码和隐藏的错误。

我怎样才能简单地测试这个案例?

最佳答案

您可以解析公式并测试其第一个字符是否为波浪号。这意味着任何可以被强制为 lambda 的没有左侧的公式都将被识别为这样,但我猜这无论如何都是所需的行为。

library(rlang)

my_func=function(x){
if(is_function(x))
return("X is a function")
else if(is_formula(x)){
if(substr(deparse(x), 1, 1) == "~"){
if(is_lambda(as_function(x)))
return("X is a lambda")
}
return("X is a formula")
}
else
return("X is something else")
}

my_func(x=is.numeric)
#> [1] "X is a function"
my_func(x=A~B)
#> [1] "X is a formula"
my_func(x=~is.numeric(.x))
#> [1] "X is a lambda"
my_func(x="foo")
#> [1] "X is something else"

创建于 2020-03-16 由 reprex package (v0.3.0)

关于r - 如何测试变量是否包含 lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60702301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com