2016-10-09 3 views
0

I défini une fonction membre d'une classe S4 (langage R de programmation) qui est censé ajouter des éléments à une liste, mais il ne fait rien:classe R S4, la fonction de membre n'a pas d'effet

setClass("ListHolder", 
representation(
    .list = "list" 
), 
prototype(
    .list = list() 
)) 
setGeneric("add", 
function(this,i) standardGeneric("add") 
) 
setMethod("add", 
signature(this="ListHolder",i="numeric"), 
definition = function(this,i){ 

    k <- length([email protected]) 
    [email protected][[k+1]] <- i 
}) 

testListHolder <- function(){ 

    lh <- new("ListHolder") 
    for(i in 1:10) add(lh,i) 
    print([email protected]) 
} 

testListHolder() 

Cette volonté imprime une liste vide. Qu'est-ce qui se passe ici?

Répondre

1

ajouter fonction est le problème: ce que vous voulez faire est de passer un objet ListHolder dans la fonction et le modifier, ce qui R ne supporte pas.

Ainsi, dans votre code ci-dessus:

  1. setMethod:add (Object, i), ajouter return(this) déclaration à la fin de la fonction ajouter.
  2. testListHolder:lh après remplacer ajouter, for(i in 1:10) lh <- add(lh,i)

EDIT: vérifier également this (utilisez la fonction de modifier un objet) question

+0

@Xiatao Luo: merci qui aide. – gcc