例如:
paste (..., sep = " ", collapse = NULL)
如何以一种方式重写此功能,以确保默认情况下每个调用都有sep = ""
?
也就是说,如何更改我没写的函数参数的默认值?
答案 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()
的问题是一个错误,而不是内在的不可能性......