在函数中使用全局变量

时间:2015-09-24 10:59:57

标签: r global-variables

我有一个非常大的数据集,我用R来分析它。

问题是我想在我的数据集上添加一些具有不同处理的列,并且我需要一些使用某些全局变量的递归函数。每个函数修改一些全局变量并创建一些变量。因此,我的数据集在内存中的重复是一个大问题......

我读了一些文档:如果我没有误解,使用<<-assign()都不能帮助我......

我想要的是什么:

mydata <- list(read.table(), ...)
myfunction <- function(var1, var2) {
   #modification of global mydata
   mydata = ...
   #definition of another variable with the new mydata
   var3 <- ...
   #recursive function
   mydata = myfunction(var2, var3)
}

你对我的问题有什么建议吗?

1 个答案:

答案 0 :(得分:4)

<<-assign都有效:

myfunction <- function(var1, var2) {
   # Modification of global mydata
   mydata <<- ...
   # Alternatively:
   #assign('mydata', ..., globalenv())

   # Assign locally as well
   mydata <- mydata

   # Definition of another variable with the new mydata
   var3 <- ...

   # Recursive function
   mydata = myfunction(var2, var3)
}

也就是说,想要从一个函数修改全局数据几乎总是一个坏主意,而且几乎可以肯定这是一个更优雅的解决方案。

此外,请注意<<-实际上与分配给globalenv()中的变量不同,而是分配给父作用域中的变量,不管是哪个也许。对于在全局环境中定义的函数,它是全局环境。对于其他地方定义的函数,它全局环境。