R 保留签名的部分函数

R 保留签名的部分函数,r,currying,partial-application,R,Currying,Partial Application,我们可以使用purrr::partial创建分部函数: f[1]1 由(v0.3.0)于2020年2月19日创建 这通常非常有用,但有一个不幸的副作用,即分区函数丢失了它的签名,而签名被省略号替换: ff #> #>函数(…) #>f(y=1,…) 虽然在编程上不相关,但这会导致开发过程中代码易读性变差,RStudio的“智能感知”不再能够帮助我们记住参数的名称和/或顺序。那么,是否有其他的分区方法可以保留原始签名(减去分区后的参数),如下所示 ff #> #>功能(x) #>f(y=1

我们可以使用
purrr::partial
创建分部函数:

f[1]1
由(v0.3.0)于2020年2月19日创建

这通常非常有用,但有一个不幸的副作用,即分区函数丢失了它的签名,而签名被省略号替换:

ff
#> 
#>函数(…)
#>f(y=1,…)
虽然在编程上不相关,但这会导致开发过程中代码易读性变差,RStudio的“智能感知”不再能够帮助我们记住参数的名称和/或顺序。那么,是否有其他的分区方法可以保留原始签名(减去分区后的参数),如下所示

ff
#> 
#>功能(x)
#>f(y=1,x)
现在,显然这可以手动完成,通过定义一个新函数
ff
,它只是带有所需参数的
f
的包装器


ff一个选项是使用
rlang::fn_fmls()
(或等效的
base::formals()
)显式为函数参数提供默认值:

# If desired, create a copy of the function first: ff <- f
rlang::fn_fmls(f) <- purrr::list_modify( rlang::fn_fmls(f), y=1 )

args(f)
# function (x, y = 1) 

f(2)
# [1] 2
# [1] 1
#如果需要,首先创建函数的副本:ff