在函数中使用全局变量

Eau*_*che 0 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)
}
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*lph 5

两者<<-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)
}
Run Code Online (Sandbox Code Playgroud)

就是说,要从一个函数中修改全局数据几乎总是一个坏主意,并且几乎肯定有一个更优雅的解决方案。

此外,请注意,<<-实际上与在中分配变量并不相同globalenv(),而是在父作用域中分配变量,无论可能是什么。对于在全局环境中定义的功能,它是全局环境。对于在其他地方定义的功能,它不是全局环境。