34

各列を個別に参照せずに、大きな data.table 内の列のグループに関数を適用しようとしています。

a <- data.table(
  a=as.character(rnorm(5)),
  b=as.character(rnorm(5)),
  c=as.character(rnorm(5)),
  d=as.character(rnorm(5))
)
b <- c('a','b','c','d')

上記の MWE を使用すると、次のようになります。

a[,b=as.numeric(b),with=F]

動作しますが、これは:

a[,b[2:3]:=data.table(as.numeric(b[2:3])),with=F]

動作しません。関数を個別に参照せずにas.numeric、列 2 と列 3 だけに適用する正しい方法は何ですか。a

(実際のデータセットでは数十列あるので実用的ではありません)

4

1 に答える 1

46

慣用的なアプローチは、使用すること.SDです.SDcols

でラップすることにより、RHS を強制的に親フレームで評価することができます。()

a[, (b) := lapply(.SD, as.numeric), .SDcols = b]

列 2:3 の場合

a[, 2:3 := lapply(.SD, as.numeric), .SDcols = 2:3]

また

mysubset <- 2:3
a[, (mysubset) := lapply(.SD, as.numeric), .SDcols = mysubset]
于 2013-05-28T04:17:21.100 に答える