将对象添加到包命名空间

发布于 2024-09-06 10:56:02 字数 311 浏览 4 评论 0原文

我想将一个函数推送到包命名空间内,以便它可以访问该包的内部对象(让我们使用 stats 包作为示例)。我尝试过使用

myfun <- function(x) print(x)
env = loadNamespace("stats")
assign("myfun", myfun , env)

但它被锁定了。所以我尝试解锁我的对象,

unlockBinding("myfun", env)

因为 myfun 尚不存在,所以我无法解锁它。

有什么帮助吗?

I'd like to push a function inside a package namespace so it can access internal objects of that package (let's use stats package as an example). I've tried using

myfun <- function(x) print(x)
env = loadNamespace("stats")
assign("myfun", myfun , env)

But it is locked. So I've tried to unlock my object

unlockBinding("myfun", env)

Since myfun doesn't exist yet, I can't unlock it.

Any help ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

拔了角的鹿 2024-09-13 10:56:02

沿着@Hadley的解决方案,但使用命名空间的环境,怎么样:

environment(myfun) <- asNamespace('stats')

Along the line of @Hadley's solution, but using the environment of the namespace, how about:

environment(myfun) <- asNamespace('stats')
森罗 2024-09-13 10:56:02

为什么不将新函数的环境设置到正确的位置呢?

myfun <- function(x) print(x)
environment(myfun) <- as.environment("package:stats")

Why not just set the environment of your new function to the right place?

myfun <- function(x) print(x)
environment(myfun) <- as.environment("package:stats")
最美不过初阳 2024-09-13 10:56:02

您可以使用三冒号运算符 ::: 访问包的内部对象。例如,看一下 as.romanutils:::.roman2numeric。 (将此与 utils::.roman2numeric 进行比较。)这​​可以帮助您避免将函数放入命名空间中。

您可能还想查看 mvbutils 包中的 dont.lockBindings,它可以阻止命名空间被锁定。

You can access internal objects of a package using the triple colon operator :::. Take a look at, for example, as.roman and utils:::.roman2numeric. (Compare this to utils::.roman2numeric.) This could help you avoid having to put your function inside the namespace.

You might also want to look at dont.lockBindings in the mvbutils package, which stops namespaces being locked.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文