2016-07-22 46 views
0

我正在嘗試覆蓋基本(非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

您設置colnames<-.default爲字符串(即不是一個函數)。這是行不通的。

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

使用反引號引用具有非語法名稱的對象。

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