将列表元素作为独立对象返回到全局环境中

时间:2012-12-10 05:31:29

标签: r environments

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

例如,我想要列表:

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

是三个单独的对象abc

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

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

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

我如何实现目标?

4 个答案:

答案 0 :(得分:37)

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

> 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"

P上。 S.这是我作为答案提供的评论

答案 1 :(得分:6)

这也可行:

lapply(seq_along(obj), function(i) assign(names(obj)[i], obj[[i]], envir = .GlobalEnv))

答案 2 :(得分:0)

我不推荐它,但您可以使用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

答案 3 :(得分:0)

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

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

list2env(setNames(obj2, letters[seq(obj2)]), envir=.GlobalEnv)
ls()
# [1] "a"    "b"    "c"    "obj2"