为什么data.table忘记R中的列表名称?

时间:2018-08-30 18:20:16

标签: r data.table

以下代码

library(data.table) 
dt<-data.table(a=list(b=list(c=list(d=list(e=list("f"))))))

使用一个由列表组成的列'a'创建一个data.table:

> dt
    a
1: <list>

“ a”列表由一个或一组嵌套列表组成。但是,data.table忘记了'a'中第一个列表的名称:

> dt$a
[[1]]
[[1]]$c
[[1]]$c$d
[[1]]$c$d$e
[[1]]$c$d$e[[1]]
[1] "f"

为什么呢?名称为b的列表将如何处理?如何按名称访问列表b?

1 个答案:

答案 0 :(得分:1)

Data.table是矩形格式-在您的情况下,您的表只有一行和一列。如果您确实想将复杂对象存储在data.table或data.frame单元格中,则可以将它们包含在列表中:

dt<-data.table(a=list(list(b=list(c=list(d=list(e=list("f")))))))

为什么b的名称丢失而没有多余的list?我想这是因为a的第一个元素被解释为进入第一行的内容,并且data.table中没有行名。提供命名向量时,也会发生类似的情况:

> dt2 <- data.table(a=c(b=1,c=2,d=3))
> dt2
   a
1: 1
2: 2
3: 3

(向量元素的名称已丢失,无法将其取回。)

这与data.frame不同:

> data.frame(a=c(b=1,c=2,d=3))
  a
b 1
c 2
d 3