从一个函数内分配多个对象到.GlobalEnv
在这里的一个post后面有一个我想知道如何在一个函数内为全局环境中的多个对象赋值。 这是我尝试使用lapply
( assign
可能比<<-
更安全<<-
但我从来没有真正使用它,并不熟悉它)。
#fake data set df <- data.frame( x.2=rnorm(25), y.2=rnorm(25), g=rep(factor(LETTERS[1:5]), 5) ) #split it into a list of data frames LIST <- split(df, df$g) #pre-allot 5 objects in R with class data.frame() V <- W <- X <- Y <- Z <- data.frame() #attempt to assign the data frames in the LIST to the objects just created lapply(seq_along(LIST), function(x) c(V, W, X, Y, Z)[x] <<- LIST[[x]])
请随意缩短我的代码的任何/所有部分,使其工作(或工作更好/更快)。
你是对的assign()
是正确的工具。 它的envir
参数可以让你精确地控制分配发生的地方 – 对于<-
或<<-
不可用的控制。
因此,例如,要将X
的值分配给全局环境中名为NAME
的对象,您可以这样做:
assign("NAME", X, envir = .GlobalEnv)
在你的情况下:
df <- data.frame( x.2=rnorm(25), y.2=rnorm(25), g=rep(factor(LETTERS[1:5]), 5) ) LIST <- split(df, df$g) NAMES <- c("V", "W", "X", "Y", "Z") lapply(seq_along(LIST), function(x) { assign(NAMES[x], LIST[[x]], envir=.GlobalEnv) } ) ls() [1] "df" "LIST" "NAMES" "V" "W" "X" "Y" "Z"