我需要一个函数生成器,它接受另一个函数和该函数的任何参数并设置新的默认值。我以为@hadley 的pryr::partial
这就是那个神奇的功能。它完全符合我的要求,只是您无法更改新的默认值。所以在这里我可以改变sep
在我的新paste
函数,但不是新的默认值collapse = "_BAR_"
。我怎样才能使partial
以这种方式执行(即默认为collapse = "_BAR_"
但启用将其设置为collapse = NULL
如果需要的话)?如果这是不可能的partial
有没有办法重写代码partial
去做这个:https://github.com/hadley/pryr/blob/master/R/partial.r
library(pryr)
.paste <- pryr::partial(paste, collapse = "_FOO_")
.paste(1:5)
.paste(1:5, LETTERS[1:5], sep="_BAR_")
.paste(1:5, collapse=NULL)
> .paste(1:5)
[1] "1_FOO_2_FOO_3_FOO_4_FOO_5"
> .paste(1:5, LETTERS[1:5], sep="_BAR_")
[1] "1_BAR_A_FOO_2_BAR_B_FOO_3_BAR_C_FOO_4_BAR_D_FOO_5_BAR_E"
> .paste(1:5, collapse=NULL)
Error in paste(collapse = "_FOO_", ...) :
formal argument "collapse" matched by multiple actual arguments
partial
适合修复某些参数值,但如果您想更改默认值,您可能会考虑不同的策略。这会起作用
.paste <- paste
formals(.paste)$collapse <- "_FOO_"
这会更改函数的参数
args(.paste)
# function (..., sep = " ", collapse = "_FOO_")
# NULL
然后你可以做
.paste(1:5)
# [1] "1_FOO_2_FOO_3_FOO_4_FOO_5"
.paste(1:5, LETTERS[1:5], sep="_BAR_")
# [1] "1_BAR_A_FOO_2_BAR_B_FOO_3_BAR_C_FOO_4_BAR_D_FOO_5_BAR_E"
.paste(1:5, collapse=NULL)
# [1] "1" "2" "3" "4" "5"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)