【问题标题】:Define Global Variables when creating packages创建包时定义全局变量
【发布时间】:2016-06-26 20:07:24
【问题描述】:

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

但是当我运行我的包时:

mypackagefunction()

我可以用这个结果调用包中的那个变量

> mypackagefunction()
> gdata
NULL

当我检查我的包裹时,如何删除此注意或警告?或其他方式来定义全局变量?

【问题讨论】:

  • 你不应该在包中定义全局变量。 CRAN 可能不会接受。
  • 它在CRAN Repository Policy 中,在Source Packages 的最后一节中写着Packages should not modify the global environment(user's workspace)。

标签: r rstudio cran


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多