Si desea eliminar las columnas por referencia y evitar la copia interna asociada con data.frames
, puede usar el data.table
paquete y la función:=
Puede pasar los nombres de un vector de caracteres al lado izquierdo del :=
operador, y NULL
como el RHS.
library(data.table)
df <- data.frame(a=1:10, b=1:10, c=1:10, d=1:10)
DT <- data.table(df)
# or more simply DT <- data.table(a=1:10, b=1:10, c=1:10, d=1:10) #
DT[, c('a','b') := NULL]
Si desea predefinir los nombres como vector de caracteres fuera de la llamada a [
, ajuste el nombre del objeto en ()
o{}
forzar la evaluación del LHS en el alcance de la llamada, no como un nombre dentro del alcance de DT
.
del <- c('a','b')
DT <- data.table(a=1:10, b=1:10, c=1:10, d=1:10)
DT[, (del) := NULL]
DT <- <- data.table(a=1:10, b=1:10, c=1:10, d=1:10)
DT[, {del} := NULL]
# force or `c` would also work.
También puede usar set
, lo que evita la sobrecarga de [.data.table
, y también funciona para data.frames
!
df <- data.frame(a=1:10, b=1:10, c=1:10, d=1:10)
DT <- data.table(df)
# drop `a` from df (no copying involved)
set(df, j = 'a', value = NULL)
# drop `b` from DT (no copying involved)
set(DT, j = 'b', value = NULL)
df#drop(var_name)
, y en su lugar, tenemos que hacer estas soluciones complicadas?