2015-12-10 15 views
5

Diyelim ki testClass adında bir S4 sınıfına sahibim. İçerik, bu sorunun amacıyla alakasızdır, ancak sayısal bir değer içermesini sağlayalım.Nesnenin tersini almak için S4 yöntemi nasıl tanımlanır?

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

Nesnenin karşısını almak gibi çalışan bir yöntem tanımlamak istiyorum. Örneğin:

vec <- rnorm(10) 
-vec 

bu ilk argüman eksik olan bir Arith yöntem bildirerek olacağını düşündük.

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

Ancak, aşağıdaki hatayı alıyorum yöntemi uygulamak çalıştığınızda:

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

Error in -tc : invalid argument to unary operator

cevap

6

Hah! Onunla biraz daha uğraştıktan sonra eksik olması gereken e2 argümanı olduğunu keşfettim. Aşağıdaki çalışmalar:

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

Nice demo. Sadece meraktan dolayı, bu .Generic'in nereden geldiğini (yani değeri nerede bulunur)? –

+0

'? .Generic', bazı kaydırmalardan sonra üretir: '' .Generic ', genel işlevi adlandıran bir uzunluk-bir karakter vektörüdür.' – thothal

+0

Eğer setMethod (" - ", c (e1 =" testClass) denerseniz, herhangi bir fark var mı? ", e2 =" kayıp "), işlev (e1, e2) -e1 @ a)'? – nicola

İlgili konular