2016-07-22 7 views
0

私は、カスタムRオブジェクトに対してcolnamesメソッドを提供するために、ベース(非S3)メソッドをオーバーライドしようとしています。私はS4ではなくS3でこれをやりたいcolnamesアクセサについてはオーバーライドベースの代入関数

、これはその後、私のクラスのメソッドを提供する、デフォルトの方法であることが基本機能を設定することによって達成することができます。

colnames <- function(x, ...) UseMethod("colnames") 
colnames.default <- base::colnames 
colnames.myclass <- function(x, ...) { 
    # some code here 
} 

しかし、どのように1は、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<-` 
関連する問題