创建包时定义全局变量
Define Global Variables when creating packages
我有这个问题。我正在为 R 创建一个名称为 "mypackagefunction" 的新包,其部分代码为 this
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: no visible binding for '<<-' assignment to ‘gdata’
但是当我 运行 我的包裹有:
mypackagefunction()
我可以用这个结果调用包中的那个变量
> mypackagefunction()
> gdata
NULL
如何在检查包裹时删除此注意或警告?或另一种定义全局变量的方法?
另一种定义全局变量的方法类似于assign('prev_id', id, envir = .GlobalEnv)
,其中id
是受让人变量或某个值,prev_id
是全局变量
有标准方法可以将数据包含在包中 - 如果您希望某些特定的 R 对象可供包的用户使用,这就是您应该做的。数据不限于数据框和矩阵——可以包含任何 R 对象。
另一方面,如果您的意图是在每次调用函数时修改全局环境,那么您就错了。在 R 的函数式编程范例中,函数 return 对象可以由用户分配到全局环境中。对象不只是全局环境中的 "appear",程序员希望用户 (a) 知道要查找它们并且 (b) 没有任何他们想要保留的同名对象(因为它们刚刚被覆盖)。可以编写这样的代码(在您的问题中使用 <<-
,或在@abhiieor 的回答中显式调用 assign
),但它可能不会被 CRAN 接受,因为它违反了 CRAN 政策。
我有这个问题。我正在为 R 创建一个名称为 "mypackagefunction" 的新包,其部分代码为 this
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: no visible binding for '<<-' assignment to ‘gdata’
但是当我 运行 我的包裹有:
mypackagefunction()
我可以用这个结果调用包中的那个变量
> mypackagefunction()
> gdata
NULL
如何在检查包裹时删除此注意或警告?或另一种定义全局变量的方法?
另一种定义全局变量的方法类似于assign('prev_id', id, envir = .GlobalEnv)
,其中id
是受让人变量或某个值,prev_id
是全局变量
有标准方法可以将数据包含在包中 - 如果您希望某些特定的 R 对象可供包的用户使用,这就是您应该做的。数据不限于数据框和矩阵——可以包含任何 R 对象。
另一方面,如果您的意图是在每次调用函数时修改全局环境,那么您就错了。在 R 的函数式编程范例中,函数 return 对象可以由用户分配到全局环境中。对象不只是全局环境中的 "appear",程序员希望用户 (a) 知道要查找它们并且 (b) 没有任何他们想要保留的同名对象(因为它们刚刚被覆盖)。可以编写这样的代码(在您的问题中使用 <<-
,或在@abhiieor 的回答中显式调用 assign
),但它可能不会被 CRAN 接受,因为它违反了 CRAN 政策。