Como modificar um objeto não exportado em um pacote
Meu pacote (vamos chamá-lo de A) depende de outro pacote B. Preciso modificar uma funçãof
em B que possui um bug que está causando falha no meu pacote. O problema é quef
é uma função não exportada.
E sef
foi exportado, eu poderia usar a técnica descrita emesta postagem para ajudar R:
Nas poucas vezes em que quero corrigir uma função como essa, uso:
unlockBinding(name, env);
assignInNamespace(name, value, ns=pkgName, envir=env);
assign(name, value, envir=env);
lockBinding(name, env);
Mas porquef
não é exportado, isso não funciona.
Exemplo simples para ilustrar o 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"
É possível modificarf
?