【发布时间】:2021-04-21 10:08:50
【问题描述】:
我遇到了一个问题,使用 with() 似乎找不到变量
我有一个包,其内部数据是一个环境 (ENV);所以我的包中的每个函数都可以访问(和修改)ENV。
基本上我在我的包中使用以下代码:
在/data-raw我做一个环境,保存到/data
ENV = new.env()
ENV$A = 2
ENV$B = 3
在我的包裹里:
foo<-function(bar){
with(ENV,{
if(nrow(bar)==0){
print(ENV$A)
} else {
print(ENV$B)
}
})
}
bar = data.frame()
foo(bar)
我实际得到的是:Error in nrow(bar) { : object '.result' not found
我以为函数环境是with 环境的父级...我不能像这样访问函数的变量吗?
感谢您的帮助。
更新
所以,他们肯定在不同的地方。函数内部的父环境是我的包命名空间,而with 内部的父环境是全局环境。
【问题讨论】:
-
当然,
with外部包也有同样的问题。重要的是是否可以从ENV的父环境中找到bar。 -
另一件事:
R CMD Check可能会抱怨在包内使用with,因为它无法验证环境中的名称是否存在。你会收到关于未声明的全局标识符的丑陋警告。确实,最好的解决方案是不要在包代码中使用with及其同类。 -
谢谢,这真的很有帮助。我将用 ENV$A 替换
with。我只使用with,因为它似乎使代码更清晰。
标签: r