43

リストがあり、リストの要素をグローバル環境で個別のオブジェクトに分割したいと考えています。

たとえば、次のリストが必要です。

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

、 、およびの 3 つの別個のオブジェクトabなりcます。

私はこれを達成しようとしました:

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 に答える