r - 防止数据框列表中的名称消失

标签 r list dataframe

所以我初始化了一个列表,我想用数据框填充它:

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

我知道为什么会发生这种情况,但是在每次数据帧重新分配时重新分配名称的最佳替代方法是什么?

最佳答案

分配时

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

您将替换以前定义为listz的对象,它是一个新对象,与该名称的任何先前对象无关。

因此,在这种情况下无需初始化列表

您有(至少)四个用于设置列表名称的选项

选项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-Hmiscllist
# 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预先存在并获取
# 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

关于r - 防止数据框列表中的名称消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12207239/

相关文章:

删除 R 中至少包含一个负值的所有行

Python:在列表中查找小于或大于输入值的最接近值,不包括输入值本身

python - 哥德巴赫猜想算法显示 "list index out of range"高于特定数字

python - Pandas 将 int 值转换为数据框中的 float

python - 用列名替换非空值

python - Pandas groupby 按特定标签获取总行的百分比

r - 循环函数列表,并将函数名称作为字符返回

r - 如何在文档中定义自定义 CSS?

C++ 查找与链表相关的代码中的错误

r - 模块中的 Xaringan 演示