Wie ändere ich ein nicht exportiertes Objekt in einem Paket?

Mein Paket (nennen wir es A) hängt von einem anderen Paket B ab. Ich muss eine Funktion ändernf in B, das einen Fehler hat, der dazu führt, dass mein Paket fehlschlägt. Das Problem ist, dassf ist eine nicht exportierte Funktion.

Wennf wurde exportiert, ich konnte die in @ beschriebene Technik anwenddieser Beitra zur R-Hilfe:

Wenn ich ein paar Mal eine Funktion wie diese patchen möchte, verwende ich:

unlockBinding(name, env);
assignInNamespace(name, value, ns=pkgName, envir=env);
assign(name, value, envir=env);
lockBinding(name, env);

Aber weilf ist nicht exportiert, das funktioniert nicht.

Einfaches Beispiel zur Veranschaulichung des Problems:

# 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"

Ist es möglich, @ zu ändef?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage