poligono - Eliminando múltiples columnas de R data.table con parámetro para columnas a eliminar
poligono en r (2)
Básicamente es porque permitimos que los símbolos en LHS de :=
agreguen nuevas columnas, por conveniencia: ej: DT[, col := val]
. Por lo tanto, para distinguir la propia col
es el nombre de lo que se almacena en la columna y los nombres de las columnas, verificamos si LHS es un name
o una expression
.
Si es un name
, agrega la columna con el nombre como tal en el LHS, y si es expression
, entonces se evalúa.
DT[, col := val] # col is the column name.
DT[, (col) := val] # col gets evaluated and replaced with its value
DT[, c(col) := val] # same as above
El idioma preferido es: dt[, (colsToDelete) := NULL]
HTH
Estoy tratando de manipular una serie de tablas de datos de formas similares, y me gustaría escribir una función para lograr esto. Me gustaría pasar un parámetro que contenga una lista de columnas en las que se realizarían las operaciones. Esto funciona bien cuando la declaración vectorial de columnas es el lado izquierdo del operador: =, pero no si se declara anteriormente (o se pasa a la función). El siguiente código muestra el problema.
dt = data.table(a = letters, b = 1:2, c=1:13)
colsToDelete = c(''b'', ''c'')
dt[,colsToDelete := NULL] # doesn''t work but I don''t understand why not.
dt[,c(''b'', ''c'') := NULL] # works fine, but doesn''t allow passing in of columns
El error es "Agregar nueva columna ''colsToDelete'' y luego asignar NULL (eliminarlo)". Claramente, está interpretando ''colsToDelete'' como un nuevo nombre de columna.
El mismo problema ocurre cuando se hace algo en este sentido.
dt[, colNames := lapply(.SD, adjustValue, y=factor), .SDcols = colNames]
Soy nuevo en R, pero tengo más experiencia con otros idiomas, por lo que esta puede ser una pregunta tonta.
Para ampliar la respuesta anterior, puede eliminar columnas por referencia haciendo:
# delete columns 10 to 15
dt[ , (10:15) := NULL ]
o
# delete columns 3, 5 and 10 to 15
dt[ , (c(3,5,10:15)) := NULL ]