data.table列的类

Ari*_*man 7 r data.table

我想知道如何在dt给定字符向量的data.table中确定列的类w.

可重复的例子:

dt <- data.table(matrix(1:10, 2))
w <- "V1"
Run Code Online (Sandbox Code Playgroud)

当您直接按名称指定列时,它将返回向量,以便您可以获取其类:

> dt[,V1]
[1] 1 2
> class(dt[,V1])
[1] "integer"
Run Code Online (Sandbox Code Playgroud)

但是,将其指定为字符向量,而是返回单列data.table:

> dt[,w,with=FALSE]
   V1
1:  1
2:  2
> class(dt[,w,with=FALSE])
[1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)

我有点想要采用以下解决方案,但肯定有更好的方法:

dt[,eval(parse(text=paste0("class(",w,")")))]
Run Code Online (Sandbox Code Playgroud)

所以有两个问题:

  1. 有没有更好的(更简洁)获得单个列的类(没有放弃上述解决方案通过评估classdata.table环境中的调用获得的速度?
  2. 有没有办法获得所有列的类的向量,无论如何sapply( myDataFrame, class)

Fra*_*ank 19

这些似乎以你想要的方式工作:

  1. class(dt[[w]])
  2. sapply(dt,class)

此外,做2,然后子集为1 : sapply(dt,class)[w].

  • +1是的,我们喜欢`[`````````[````````````````````` (6认同)
  • 还值得注意; 由于`as.list.data.table`的实现,`data.table`只能在调用`sapply` /`lapply`时生成`dt`的浅层副本.在`data.frame`s的情况下,制作副本. (5认同)