这些天来,名字越来越难了。我们最终需要使用a_function_to_find_the_correlation_of_a_data_set_but_slightly_different
等名称来添加其他软件包。
我的问题如下:
如何使用基本函数的名称(例如cor
)作为在特定类上运行的函数名在包中使用,如果它不属于该类,则假定从基础统计包中原始使用cor
?
以下是一个例子:
cor(mtcars[1:4, 1:4])
## > cor(mtcars[1:4, 1:4])
## mpg cyl disp hp
## mpg 1.0000000 -0.9753429 -0.4962289 -0.9753429
## cyl -0.9753429 1.0000000 0.6755988 1.0000000
## disp -0.4962289 0.6755988 1.0000000 0.6755988
## hp -0.9753429 1.0000000 0.6755988 1.0000000
cor <-
function (x, ...) {
UseMethod("cor")
}
dat <- "I wish robots would disappear."
class(dat) <- c("whammy_robots", class(dat))
cor.whammy_robots <- function(x, ...) {
gsub("robots", "", x)
}
cor(dat)
## > cor(dat)
## [1] "I wish would disappear."
## attr(,"class")
## [1] "whammy_robots" "character"
cor(mtcars[1:4, 1:4])
## > cor(mtcars[1:4, 1:4])
## Error in UseMethod("cor") :
## no applicable method for 'cor' applied to an object of class "data.frame"
如果对象不属于此类(例如whammy.robots
),有没有办法说出嘿,那么就像通常cor
那样表现?
我认为我可以制作具体的新方法,例如:
cor.data.frame <- function(x, ...) {
stats::cor(x, ...)
}
和
cor.matrix <- function(x, ...) {
stats::cor(x, ...)
}
但这很快就变得错综复杂。
答案 0 :(得分:5)
暂且不说你想做什么可能不是一个好主意......
您不必为每个可能的类定义方法。这就是默认方法的用途。
> cor.default <- stats::cor
> cor(mtcars[1:4, 1:4])
mpg cyl disp hp
mpg 1.0000000 -0.9753429 -0.4962289 -0.9753429
cyl -0.9753429 1.0000000 0.6755988 1.0000000
disp -0.4962289 0.6755988 1.0000000 0.6755988
hp -0.9753429 1.0000000 0.6755988 1.0000000