【发布时间】:2016-07-15 05:41:07
【问题描述】:
我的包(我们称之为 A)依赖于另一个包 B。我需要修改 B 中的函数f,该函数有一个导致我的包失败的错误。问题是f 是一个未导出的函数。
如果f 被导出,我可以使用this post 中描述的技术来R-help:
有几次我想修补这样的功能,我使用:
unlockBinding(name, env); assignInNamespace(name, value, ns=pkgName, envir=env); assign(name, value, envir=env); lockBinding(name, env);
但是因为f 未导出,所以这不起作用。
简单的例子来说明问题:
# 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"
f可以修改吗?
【问题讨论】: