2010-05-14 5 views
0

Si vous trouvez un bogue dans un paquet, il est généralement possible de corriger le problème avec fixInNamespace, par ex. fixInNamespace("mean.default", "base").Comment patcher une méthode S4 dans un paquet R?

Pour les méthodes S4, je ne suis pas sûr de savoir comment le faire. La méthode que je regarde est dans le paquet gWidgetstcltk. Vous pouvez voir le code source avec

getMethod(".svalue", c("gTabletcltk", "guiWidgetsToolkittcltk")) 

Je ne peux pas trouver les méthodes avec fixInNamespace.

fixInNamespace(".svalue", "gWidgetstcltk") 

Error in get(subx, envir = ns, inherits = FALSE) : 
    object '.svalue' not found 

Je pensais que setMethod pourrait faire l'affaire, mais

setMethod(".svalue", c("gTabletcltk", "guiWidgetsToolkittcltk"), 
    definition = function (obj, toolkit, index = NULL, drop = NULL, ...) 
    { 
     widget = getWidget(obj) 
     sel <- unlist(strsplit(tclvalue(tcl(widget, "selection")), 
      " ")) 
     if (length(sel) == 0) { 
      return(NA) 
     } 
     theChildren <- .allChildren(widget) 
     indices <- sapply(sel, function(i) match(i, theChildren)) 
     inds <- which(visible(obj))[indices] 
     if (!is.null(index) && index == TRUE) { 
      return(inds) 
     } 
     if (missing(drop) || is.null(drop)) 
      drop = TRUE 
     chosencol <- tag(obj, "chosencol") 
     if (drop) 
      return(obj[inds, chosencol, drop = drop]) 
     else return(obj[inds, ]) 
    }, 
    where = "package:gWidgetstcltk" 
) 

Error in setMethod(".svalue", c("gTabletcltk", "guiWidgetsToolkittcltk"), : 
    the environment "gWidgetstcltk" is locked; cannot assign methods for function ".svalue" 

Toutes les idées?

+0

Je suggérerais de soumettre le correctif aux auteurs du paquet. – Shane

+0

@Shane: Je l'ai fait, mais je suis impatient et je voulais voir la version modifiée immédiatement. –

Répondre

1

Que diriez-vous de la façon old-school d'obtenir la source, d'appliquer le changement et de reconstruire?

+0

J'ai eu le sentiment que cela pourrait être la seule réponse. Cela semble beaucoup d'effort cependant. –

Questions connexes