例如,我有一个环境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)
之类的事情来将它与我的包关联起来。
这似乎是多余的和不必要的,为什么会有这种行为?
答案 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"