创建包时定义全局变量

时间:2016-06-26 20:07:24

标签: r rstudio cran

我有这个问题。我正在为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

检查包裹时如何删除此注意或警告?或另一种定义全局变量的方法?

2 个答案:

答案 0 :(得分:3)

有一些标准方法可以在数据包中包含数据 - 如果您希望某个特定的R对象可供该程序包的用户使用,那么您应该这样做。数据不限于数据帧和矩阵 - 可以包括任何R对象。

另一方面,如果你的意图是每次调用一个函数时修改全局环境,那么你做错了。在R的函数式编程范例中,函数返回可由用户分配到全局环境中的对象。对象不只是“出现”在全局环境中,程序员希望用户(a)都知道要查找它们,(b)没有任何他们想要保留的同名对象(因为他们刚刚被覆盖了)。可以编写这样的代码(在问题中使用<<-,或者在@ abhiieor的答案中明确调用assign),但CRAN可能不会接受它,因为它违反了CRAN策略。

答案 1 :(得分:1)

定义全局变量的另一种方法是assign('prev_id', id, envir = .GlobalEnv),其中id是受让人变量或某个值,prev_id是全局变量