【问题标题】:How to manually create and load namespaces in R [duplicate]如何在 R [重复] 中手动创建和加载命名空间
【发布时间】:2014-09-04 17:55:36
【问题描述】:

是否可以手动创建和加载命名空间环境foo(无需制作实际的foo 包),以便我们可以使用双冒号运算符foo::test 访问此环境中的对象?

attach 函数将列表或环境附加到搜索路径:

foo <- list(test=123)
attach(foo)
get("test", "foo")

但这确实让用户可以访问foo::test

【问题讨论】:

  • 所以你想使用::而不是$来访问环境中的对象?
  • 可能相关:Konrad Rudolph 的 modules R 系统(不确定您想要实现的目标)。

标签: r


【解决方案1】:

事实证明,这可以通过大部分未记录的namespace 包实现:

library(namespace)
ns <- makeNamespace("myNamespace")
assign("test", 7, env=ns)
setNamespaceInfo(ns, "exports", as.environment(list(test="test")))
print(myNamespace::test)

但不确定这有多安全。例如sessionInfo 不再起作用:

> sessionInfo()
Error in if (pkgpath == "") { : argument is of length zero

【讨论】:

猜你喜欢
  • 2012-04-26
  • 1970-01-01
  • 2011-11-19
  • 2016-07-21
  • 2011-09-19
  • 2013-01-03
  • 1970-01-01
  • 2011-08-06
相关资源
最近更新 更多