我需要一个函数生成器,它接受另一个函数和该函数的任何参数并设置新的默认值。我以为@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"
关于r - 函数生成;更改其他功能的默认值(部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25355310/