R语言如何修改函数...可变参数默认值?以jsonlite::stream_out为例
default包只能修改函数显式定义的参数,...是不定参数容器,没有固定参数名,所以无法直接修改,以下是几种通用的实现方案:
方法1:自定义包装函数(最推荐,无副作用)
直接封装原函数,预设你需要传入...的参数默认值,其余参数透传即可:
# 可以直接覆盖原函数名,也可以自定义新名避免和原包函数冲突 stream_out <- function(x, digits = 10, ...) { jsonlite::stream_out(x, digits = digits, ...) }
修改完成后直接调用stream_out(df)就会默认输出10位小数,不需要每次手动传参。
方法2:动态修改原函数形参列表
你可以给原函数主动追加显式参数,之后就可以像修改普通参数一样设置默认值:
# 给stream_out新增digits参数并设置默认值为10 formals(stream_out) <- c(formals(stream_out), list(digits = 10))
如果仍想使用default包管理默认值,也可以先追加参数再修改:
# 先添加digits作为stream_out的显式参数 formals(stream_out) <- c(formals(stream_out), alist(digits = )) # 再用default包修改默认值 default(stream_out) <- list(digits = 10)
方法3:用purrr::partial预绑定参数
如果你偏好函数式编程写法,可以用partial函数固定参数值:
library(purrr) stream_out <- partial(jsonlite::stream_out, digits = 10)
后续调用时预绑定的参数会自动传入...,其余参数可以正常传递。
内容的提问来源于stack exchange,提问作者Nick Criswell
相关产品推荐
相关产品推荐

