R Packages - 为什么环境与包含它们的包无关?

时间:2014-02-03 17:25:43

标签: r package environment

例如,我有一个环境myEnv,它位于我的包Test中。那么为什么getPackageName(myEnv)返回当前时间"2014-02-03 17:17:23"而不是"Test"

# In /R/Test.R
myEnv <- new.env()
print(getPackageName(myEnv))

# Now build in RStudio:
==> Rcmd.exe INSTALL --no-multiarch --with-keep.source Test

<other messages here>

** preparing package for lazy loading
[1] "2014-02-03 17:17:23"
Warning in getPackageName(myEnv) :
  Created a package name, '2014-02-03 17:17:23', when none found

<etc etc etc>

我没有在任何地方看到这种行为或其推理。事实上,这可能会造成严重破坏,正如this question清楚地证明的那样,因此每当我创建一个环境时,我都必须记住做setPackageName("Test", myEnv)之类的事情来将它与我的包关联起来。

这似乎是多余的和不必要的,为什么会有这种行为?

1 个答案:

答案 0 :(得分:0)

尝试获取env的父环境而不是环境本身。

这似乎至少对我使用devtools安装的一个简单示例起作用,所以谁知道Hadley在那里对环境做了什么伎俩:

> parent.env(myEnv)
<environment: namespace:Test>
> getPackageName(parent.env(myEnv))
[1] "Test"

这不适用于包中定义的其他对象:

> foo
function(){
}
<environment: namespace:Test>
> getPackageName(parent.env(foo))
Error in parent.env(foo) : argument is not an environment

你必须得到这样的环境:

> getPackageName(environment(foo))
[1] "Test"