2012-06-21 3 views

Répondre

1

Si vous créez une fonction S4 générique vous devriez pouvoir définir une signature acceptable pour les arguments de méthode à "ANY". Je ne suis pas sûr si la représentation pourrait être réglée sur "ANY" puisque la façon dont je pense aux représentations est plus spécifique que cela. Les arguments qui n'ont pas de signatures affectées sont enregistrés avec la classe "ANY". Vous pouvez utiliser le type « vecteur » comme représentation qui peut accepter des listes ou des objets atomiques:

setClass("myClass", representation(A="vector")) 
[1] "myClass" 
> new("myClass", A=list(a=c(2,3,4), b="a") ) 
An object of class "myClass" 
Slot "A": 
$a 
[1] 2 3 4 

$b 
[1] "a" 

Je ne suis pas sûr que ce soit aussi général que vous avez demandé, mais vous ne dites rien besoin des attributs aussi bien . Je pensais que vecteur pourrait perdre les attributs, mais il ne semble pas:

> setClass("myClass", representation(A="vector")) 
[1] "myClass" 
> new("myClass", A=B ) 
An object of class "myClass" 
Slot "A": 
$a 
[1] 2 3 4 

$b 
[1] "a" 

attr(,"myattr") 
[1] "test" 
1

J'ai trouvé un palliatif dans le code source du paquet TSdbi de Paul Gilbert.

setClassUnion("OptionalChar", c("character", "logical")) 
setClass("myClass", representation(A="OptionalChar")) 

Cela peut être utile lorsque vous attendez character mais souhaitez permettre NA aussi. Je sais que ce n'est pas n'importe quel mais peut-être que vous voudrez peut-être le restreindre, mais pas à un seul mode.

1

Vous pouvez utiliser "ANY".

> setClass("myClass", representation(A="ANY")) 
> new("myClass", A=c(1,2,3)) 
An object of class "myClass" 
Slot "A": 
[1] 1 2 3 
> new("myClass", A=unique) 
An object of class "myClass" 
Slot "A": 
function (x, incomparables = FALSE, ...) 
UseMethod("unique") 
<bytecode: 0x00000000071a8270> 
<environment: namespace:base> 
Questions connexes