13

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

可重现的例子:

dt <- data.table(matrix(1:10, 2))
w <- "V1"

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

> dt[,V1]
[1] 1 2
> class(dt[,V1])
[1] "integer"

但是,将其指定为字符向量,它会返回一列 data.table:

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

我已经找到了以下解决方案,但肯定有更好的方法:

dt[,eval(parse(text=paste0("class(",w,")")))]

所以两个问题:

  1. 是否有更好(更简洁)来获得单列的类(不放弃上述解决方案通过评估classdata.table 环境中的调用而获得的速度?
  2. 有没有办法获得所有列的类的向量,类似于sapply( myDataFrame, class)
4

1 回答 1

23

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

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

此外,做 2 然后子集适用于 1: sapply(dt,class)[w]

于 2013-09-16T19:31:22.647 回答