【发布时间】:2013-12-21 02:05:04
【问题描述】:
例如:
paste (..., sep = " ", collapse = NULL)
如何重写此函数以确保每个调用默认都有sep = ""?
也就是说,我如何更改我没有编写的函数的参数的默认值?
【问题讨论】:
-
为什么不使用
paste0,默认是sep = ""?
标签: r function arguments definition redefinition
例如:
paste (..., sep = " ", collapse = NULL)
如何重写此函数以确保每个调用默认都有sep = ""?
也就是说,我如何更改我没有编写的函数的参数的默认值?
【问题讨论】:
paste0,默认是sep = ""?
标签: r function arguments definition redefinition
像这样:
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() 中使用。
你会遇到一些麻烦覆盖这个默认值 功能。如果你想给我们更多的上下文,在 cmets 或 对原始问题的编辑,我们可能会有更多的建议。
更新:Setting Function Defaults R on a Project Specific Basis 的一个 cmets 表明 paste() 的问题是一个错误,而不是内在的不可能......
【讨论】: