例如:
paste (..., sep = " ", collapse = NULL)
我如何重写这个函数以确保每个调用都sep = ""
默认有?
也就是说,如何更改我没有编写的函数的参数的默认值?
例如:
paste (..., sep = " ", collapse = NULL)
我如何重写这个函数以确保每个调用都sep = ""
默认有?
也就是说,如何更改我没有编写的函数的参数的默认值?
像这样:
paste <- function(..., sep="", collapse=NULL) base::paste(...,sep=sep, collapse=collapse)
但是为此已经有了一个功能paste0
。
并不是说如果使用基本命名空间调用 paste ,它将使用默认版本。
这是另一种使用方式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>
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()
是错误而不是内在的不可能......