如何重写R中的函数默认参数?

时间:2013-12-04 14:24:02

标签: r function arguments definition redefinition

例如:

paste (..., sep = " ", collapse = NULL)

如何以一种方式重写此功能,以确保默认情况下每个调用都有sep = ""

也就是说,如何更改我没写的函数参数的默认值?

3 个答案:

答案 0 :(得分:4)

像这样:

paste <- function(..., sep="", collapse=NULL) base::paste(...,sep=sep, collapse=collapse)

但为此已经有一个函数paste0

如果使用基本命名空间调用paste,它也将使用默认版本。

答案 1 :(得分:3)

这是使用formals的另一种方式。

paste.formals <- formals(paste)
paste.formals$sep <- ''
formals(paste, envir=.BaseNamespaceEnv) <- paste.formals
paste
# function (..., sep = "", collapse = NULL) 
# .Internal(paste(list(...), sep, collapse))
# <environment: namespace:base>

答案 2 :(得分:2)

paste("a","b") ## "a b"
library(Defaults)

一个有效的例子:

mean(c(1,3,NA))  ## NA
setDefaults(mean.default,na.rm=TRUE)
mean(c(1,3,NA))  ## 2

paste()存在问题:

setDefaults(paste,sep="")
## Error: evaluation nested too deeply:
##    infinite recursion / options(expressions=)?

大概是因为paste()本身在setDefaults()中使用。

您将无法覆盖默认设置 功能。如果你想给我们更多的背景,评论或 编辑原始问题,我们可能会有更多的消化。

更新Setting Function Defaults R on a Project Specific Basis的其中一条评论表明paste()的问题是一个错误,而不是内在的不可能性......