2013-02-04 1 views
3

J'essaie de définir la méthode "c" pour un objet que j'ai créé.définir la méthode S4 avec 3 points

quelque chose comme

setMethod("c", 
      signature(...), 
      definition=function (...) { 
      myObject = list(...)[[1]] 
      [email protected]=lapply(list(...), FUN = function(x) slot(x, "mySlot")) 
      return(myObject) 
     } 
) 

Le problème est que je ne peux pas définir la classe de ... de sorte que la répartition se fait correctement. Une idée?

+0

Regardez 'getGeneric ("c")' - vous définissez les méthodes sur 'x', pas' ... '. – hadley

Répondre

4

Élaborant sur le commentaire de @hadley la signature devrait être pour votre classe, et la définition devrait suivre getGeneric. Par conséquent

> getGeneric("c") 
standardGeneric for "c" defined from package "base" 

function (x, ..., recursive = FALSE) 
standardGeneric("c", .Primitive("c")) 
<environment: 0x4956ab8> 
Methods may be defined for arguments: x, recursive 
Use showMethods("c") for currently available ones. 

si

setClass("A", representation(x="numeric")) 
setMethod("c", "A", function(x, ..., recursive=FALSE) { 
    "here I am" 
}) 

et

> c(new("A"), new("A")) 
[1] "here I am" 
Questions connexes