gpt4 book ai didi

r - 从一个函数中向.GlobalEnv分配多个对象

转载 作者:行者123 更新时间:2023-12-03 10:58:44 25 4
gpt4 key购买 nike

前一天在这里发表的一篇文章让我想知道如何从一个函数中为全局环境中的多个对象分配值。这是我尝试使用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]])

请随意缩短我的代码的任何/所有部分以使其正常工作(或更好/更快地工作)。

最佳答案

2018年10月10日更新:

执行此特定任务的最简洁的方法是使用list2env(),如下所示:

## Create an example list of five data.frames
df <- data.frame(x = rnorm(25),
g = rep(factor(LETTERS[1:5]), 5))
LIST <- split(df, df$g)

## Assign them to the global environment
list2env(LIST, envir = .GlobalEnv)

## Check that it worked
ls()
## [1] "A" "B" "C" "D" "df" "E" "LIST"

原始答案,演示了使用assign()

您说对了, assign()是适合该工作的工具。它的 envir参数使您可以精确控制分配的位置- <-<<-都不可用。

因此,例如,要在全局环境中将 X的值分配给名为 NAME的对象,您可以执行以下操作:
assign("NAME", X, envir = .GlobalEnv)

在您的情况下:
df <- data.frame(x = 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"

关于r - 从一个函数中向.GlobalEnv分配多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9726705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com