6

そこで、データフレームで埋めたいリストを初期化します。

listz <- vector("list",2)

また、データフレームの名前を保持したいので、それらを割り当てます:

listzNames <- c("frame1","frame2")
names(listz) <- listzNames

問題は、データフレームに再割り当てを行うたびに、名前が NULL になることです。

listz <- list(data.frame("id" = 1:3, "hat" = 1:3),
           data.frame("id" = 4:6, "hat" = 4:6))

> names(listz)
NULL

なぜこれが起こるのかはわかっていますが、データフレームの再割り当てごとに名前を再割り当てする代わりに、何がうまくいくのでしょうか?

4

2 に答える 2

12

割り当てるとき

listz <- list(data.frame("id" = 1:3, "hat" = 1:3),
           data.frame("id" = 4:6, "hat" = 4:6))

以前に として定義されていたオブジェクトを置き換えていますlistz。これは新しいオブジェクトであり、その名前の以前のオブジェクトとは無関係です。

したがって、この場合、リストを初期化する必要はありません

リストの名前を設定するための(少なくとも)4つのオプションがあります

オプション1 -setNames

# Option 1 - using setNames
listz <- setNames(list(data.frame("id" = 1:3, "hat" = 1:3),
           data.frame("id" = 4:6, "hat" = 4:6)), listzNames)

オプション 2 - 名前を付ける

# Option 2 - naming the list as you go
listz <- list(frame1 = data.frame("id" = 1:3, "hat" = 1:3),
           frame2 = data.frame("id" = 4:6, "hat" = 4:6))

オプション 3 -Hmiscおよびllist

# If your data.frames already exist
# use the llist function in Hmisc, which names the list
# using the names of the object in each element
library(Hmisc)
frame1 <- data.frame("id" = 1:3, "hat" = 1:3)
frame2 <- data.frame("id" = 4:6, "hat" = 4:6)

listz <- llist(frame1,frame2)

オプション 4 - setNames と get を使用して既存のもの

# if your data.frames already exist in the global environment then
# you can use
listz <- setNames(lapply(listzNames, get),listzNames)

オプション5リストの初期化(私はこれが好きではありません)

listz <- vector("list",2)
names(listz) <- listzNames
listz[[1]] <- data.frame("id" = 1:3, "hat" = 1:3)
listz[[2]] <- data.frame("id" = 4:6, "hat" = 4:6)

このオプションは好きではありません。より多くの入力が必要になるため、エラーが発生する可能性が高くなります。

についての注意lapply

lapplyすべての名前を保持します

lapply(listz,head,n=1)

#$frame1
#  id hat
#1  1   1
#
#$frame2
#  id hat
#1  4   4
于 2012-08-31T00:09:59.750 に答える
2

オプション 6 :)

listz[] <- list(data.frame("id" = 1:3, "hat" = 1:3),
                data.frame("id" = 4:6, "hat" = 4:6))
于 2012-08-31T01:50:02.457 に答える