我想覆盖R中的某些功能,为它们添加功能或修改它们的行为。例如,我不能忍受min,max,mean,sd和其他的默认情况下na.rm参数为false,或者如果你在一个因子上运行as.numeric,它不解析级别文本但是级别标识符
所以我想改写它:
as.numeric <- function(x) {
if(is.numeric(x)) return(x)
if (is.factor(x)) x <- as.vector(x)
as.numeric(x)
}
不幸的是,这会触发无限递归(当然)。我该如何解决这个问题?
答案 0 :(得分:2)
如果你小心隔离名字(不幸的是R不鼓励这样做),没有理由反对覆盖现有名称。
在您的情况下,您所要做的就是明确限定要调用的函数的包名称,以消除歧义:
as.numeric <- function(x) {
if(is.numeric(x)) return(x)
if (is.factor(x)) x <- as.vector(x)
base::as.numeric(x)
}
那就是说,我会明智地使用它。
如果您发现自己影响现有的函数名称,您应该考虑在自己的命名空间中隔离您的名称。您可以使用modules正确执行此操作。