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?
Je suggérerais de soumettre le correctif aux auteurs du paquet. – Shane
@Shane: Je l'ai fait, mais je suis impatient et je voulais voir la version modifiée immédiatement. –