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)
您对我的问题有什么建议吗?
两者<<-和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(),而是在父作用域中分配变量,无论可能是什么。对于在全局环境中定义的功能,它是全局环境。对于在其他地方定义的功能,它不是全局环境。