1

例如:

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

我如何重写这个函数以确保每个调用都sep = ""默认有?

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

4

3 回答 3

4

像这样:

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

但是为此已经有了一个功能paste0

并不是说如果使用基本命名空间调用 paste ,它将使用默认版本。

于 2013-12-04T14:28:54.770 回答
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>
于 2013-12-04T14:58:03.847 回答
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().

覆盖此函数的默认值会遇到一些麻烦。如果您想在对原始问题的评论或编辑中为我们提供更多背景信息,我们可能会有更多建议。

更新:在项目特定基础上设置函数默认值 R的评论之一表明问题paste()是错误而不是内在的不可能......

于 2013-12-04T14:35:25.357 回答