13

dt文字ベクトルを指定して data.table の列のクラスを確認する方法を知りたいwです。

再現可能な例:

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

列を名前で直接指定すると、クラスを取得できるようにベクトルが返されます。

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

ただし、これを文字ベクトルとして指定すると、代わりに 1 列の 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,")")))]

2つの質問:

  1. 単一の列のクラスを取得するためのより良い(より簡潔な)方法はありますか(data.tableclassの環境での呼び出しを評価することによって上記のソリューションが得る速度をあきらめることなく)?
  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 に答える