覆盖基本赋值功能

时间:2016-07-22 11:13:14

标签: r methods

我试图覆盖基础(非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')"

1 个答案:

答案 0 :(得分:2)

您将colnames<-.default设置为字符串(即不是函数)。那不行。

"colnames<-.default" <- "base::colnames<-"

使用反引号来引用具有非句法名称的对象。

`colnames<-.default` <- base::`colnames<-`