Aplicar una función a un subconjunto de columnas data.table, por column-indices en lugar de name

Intento aplicar una función a un grupo de columnas en una gran tabla de datos sin referirme a cada una individualmente.

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') 

con el MWE anterior, esto:

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

funciona, pero esto:

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

no funciona ¿Cuál es la forma correcta de aplicar la función as.numeric a solo las columnas 2 y 3 de a sin consultarlas individualmente?

(En el conjunto de datos real hay decenas de columnas, por lo que sería poco práctico)

El enfoque idiomático es usar .SD y .SDcols

Puede forzar que el RHS se evalúe en el marco principal al envolverlo en ()

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

Para las columnas 2: 3

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

o

 mysubset <- 2:3 a[, (mysubset) := lapply(.SD, as.numeric), .SDcols = mysubset] 
    Intereting Posts