我试图覆盖基础(非S3)方法,为自定义R对象提供colnames
方法。我想用S3而不是S4来做这件事。
对于colnames
访问器,可以通过将基本函数设置为默认方法,然后为我的类提供方法来实现:
colnames <- function(x, ...) UseMethod("colnames")
colnames.default <- base::colnames
colnames.myclass <- function(x, ...) {
# some code here
}
但是,如何覆盖setter方法。我希望这样的东西应该有用吗?
"colnames<-" <- function(x, value) UseMethod("colnames<-")
"colnames<-.default" <- "base::colnames<-"
"colnames<-.myclass" <- function(x, value) {
print("Setting colnames for myclass")
# Some code
}
但是,这似乎无法为常规矩阵正确调用基函数:
> test <- matrix(1:10, 5)
> colnames(test) <- c("a", "b")
Error in UseMethod("colnames<-") :
no applicable method for 'colnames<-' applied to an object of class "c('matrix', 'integer', 'numeric')"
答案 0 :(得分:2)
您将colnames<-.default
设置为字符串(即不是函数)。那不行。
"colnames<-.default" <- "base::colnames<-"
使用反引号来引用具有非句法名称的对象。
`colnames<-.default` <- base::`colnames<-`