Il mio pacchetto (chiamiamolo A) dipende da un altro pacchetto B. Ho bisogno di modificare una funzione f
in B che presenta un errore che causa il fallimento del mio pacchetto. Il problema è che f
è una funzione non esportata.Come modificare un oggetto non esposto in un pacchetto
Se f
è stato esportato, ho potuto utilizzare la tecnica descritta in this post a R-help:
Le poche volte che voglio rattoppare una funzione come questa, io uso:
unlockBinding(name, env); assignInNamespace(name, value, ns=pkgName, envir=env); assign(name, value, envir=env); lockBinding(name, env);
Ma poiché f
non è stato esportato, questo non funziona.
semplice esempio per illustrare il problema:
# rf is an exported function from the stats package; this works
foo <- function(x) x
unlockBinding("rf", as.environment("package:stats"))
assignInNamespace("rf", foo, ns="stats", pos="package:stats")
assign("rf", bar, pos="package:stats")
lockBinding("rf", as.environment("package:stats"))
rf(42)
# 42
# C_rf is an unexported object that rf() uses; this fails
bar <- function(x) x + 1
unlockBinding("C_rf", as.environment("package:stats"))
assignInNamespace("C_rf", bar, ns="stats", pos="package:stats")
assign("C_rf", bar, pos="package:stats")
lockBinding("C_rf", as.environment("package:stats"))
# Error in unlockBinding("C_rf", as.environment("package:stats")) :
# no binding for "C_rf"
E 'possibile modificare f
?