我有一个非常大的数据集,我用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)
}
你对我的问题有什么建议吗?
答案 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()
中的变量不同,而是分配给父作用域中的变量,不管是哪个也许。对于在全局环境中定义的函数,它是全局环境。对于其他地方定义的函数,它不全局环境。