43

我有一个列表,并且想将列表中的元素分解为全局环境中的单独对象。

例如,我想要以下列表:

obj <- list(a=1:5, b=2:10, c=-5:5)

是三个单独的对象a,bc

我试图通过以下方式实现这一目标:

lapply(obj, FUN = function(x) names(x)[1] <<- x[1])

但它失败了,与Error in names(x)[1] <<- x[1] : object 'x' not found.

我怎样才能实现我的目标?

4

4 回答 4

59

将列表映射到环境有特殊功能:

> obj <- list(a=1:5, b=2:10, c=-5:5)
> ls()
[1] "obj"
> list2env(obj,globalenv())
<environment: R_GlobalEnv>
> ls()
[1] "a"   "b"   "c"   "obj"

PS这是我作为答案提供的评论

于 2012-12-10T09:17:22.397 回答
9

这也可行:

lapply(seq_along(obj), function(i) assign(names(obj)[i], obj[[i]], envir = .GlobalEnv))
于 2012-12-10T05:45:08.107 回答
0

如果列表还不是命名列表,我们需要先设置名称,例如使用递增的字母。

obj2 <- list(1:5, 2:10, -5:5)

list2env(setNames(obj2, letters[seq(obj2)]), envir=.GlobalEnv)
ls()
# [1] "a"    "b"    "c"    "obj2"
于 2021-07-22T09:53:55.110 回答
-1

我不推荐它,但你可以使用attach

> obj <- list(a=1:5, b=2:10, c=-5:5)
> attach(obj)
> a
[1] 1 2 3 4 5
> b
[1]  2  3  4  5  6  7  8  9 10
> c
 [1] -5 -4 -3 -2 -1  0  1  2  3  4  5
于 2012-12-10T05:36:28.667 回答