2015-12-10 9 views
5

私はS12クラスがtestClassだとしましょう。内容はこの質問の目的とは無関係ですが、数値にするようにしましょう。オブジェクトの反対側を取るS4メソッドを定義する方法は?

#' An S4 class that stores a list. 
#' @export 
setClass("testClass", 
       representation(a="numeric")) 

オブジェクトの反対側のように機能するメソッドを定義したいと思います。たとえば:

vec <- rnorm(10) 
-vec 

私はこれが最初の引数が不足しているとArithメソッドを宣言するだろうと思いました。

#' @export 
setMethod("Arith", c(e1="missing", e2="testClass"), 
        function(e1, e2) 
        { 
         op = .Generic[[1]] 
         switch(op, 
          `-` = return([email protected]) 
         ) 
        } 
) 

しかし、私は次のエラーを取得する方法に適用しようとすると:

tc <- new("testClass", a=2) 
-tc 

Error in -tc : invalid argument to unary operator

答えて

6

ほらを!もう少し手を加えた後、私はそれが失われる必要があるのはe2引数であることを発見しました。次の作品:

#' @export 
setMethod("Arith", c(e1="testClass", e2="missing"), 
        function(e1, e2) 
        { 
         op = .Generic[[1]] 
         switch(op, 
          `-` = return([email protected]) 
         ) 
        } 
) 
+0

ニースのデモ。好奇心の外に、「.Generic」がどこから来たのか(つまり、その価値がどこにあるのか) –

+0

' '.Generic'はいくつかのスクロールの後に生成します:' '.Generic ' "、e2 =" missing ")、function(e1、e2)-e1 @ a)'? – nicola

関連する問題