我有这个问题。我正在为R创建一个名为“mypackagefunction”的新包,其部分代码为
mypackagefunction<-function(){
##This is the constructor of my package
##1st step: define variables
gdata <<- NULL
#...
#below of this, there are more functions and code
}
因此,我在R Studio中构建并重新加载,然后检查并在此步骤中收到此警告:
mypackagefunction:'&lt;&lt; - &lt; - '赋值给'gdata'没有可见的绑定
但是当我用:
运行我的包裹时mypackagefunction()
我可以使用调用带有此结果的包中的变量
> mypackagefunction()
> gdata
NULL
检查包裹时如何删除此注意或警告?或另一种定义全局变量的方法?
答案 0 :(得分:3)
有一些标准方法可以在数据包中包含数据 - 如果您希望某个特定的R对象可供该程序包的用户使用,那么您应该这样做。数据不限于数据帧和矩阵 - 可以包括任何R对象。
另一方面,如果你的意图是每次调用一个函数时修改全局环境,那么你做错了。在R的函数式编程范例中,函数返回可由用户分配到全局环境中的对象。对象不只是“出现”在全局环境中,程序员希望用户(a)都知道要查找它们,(b)没有任何他们想要保留的同名对象(因为他们刚刚被覆盖了)。可以编写这样的代码(在问题中使用<<-
,或者在@ abhiieor的答案中明确调用assign
),但CRAN可能不会接受它,因为它违反了CRAN策略。
答案 1 :(得分:1)
定义全局变量的另一种方法是assign('prev_id', id, envir = .GlobalEnv)
,其中id
是受让人变量或某个值,prev_id
是全局变量