r - 函数生成;更改其他功能的默认值(部分)

标签 r partial pryr

我需要一个函数生成器,它接受另一个函数和该函数的任何参数并设置新的默认值。我以为@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/

相关文章:

对某些列进行逐行累加和,然后进行逐行除法

r - 在 .Rprofile 文件中设置 Rstudio 主题信息

oracle - 物化 View 的部分刷新

c# - ASP.net c# 部分获取请求

r - 如何从调用对象中获取函数对象

r - 如何在 R 中不通过 Corpus/VCorpus 将稀疏或 simple_triplet_matrix 转换为 tm-package 文档术语矩阵?

r - 控制数字/舍入作为基本函数中的参数

c++ - 我如何找到部分单词匹配/查找 C++

r - 将基本 r 图保存为可以在多图中绘制的对象