Cuando uso el paquete data.table
, no estoy seguro de cuándo necesito setkey()
. Por ejemplo, cuando se usa el operador :=
con la opción by
, las cosas parecen ser muy rápidas aunque no haya configurado una tecla. ¿Podría alguien aclarar cuándo es necesario setkey()
y cuándo no? Y si no es necesario antes de llamar al :=
con by
, entonces ¿cómo es el paquete data.table
tan rápido ya que presumiblemente tiene que hacer lo mismo que apply
en el estándar data.frame
R haciendo una búsqueda secuencial en lugar de una binaria ya que no saber si mi data.table
en realidad está ordenado por el argumento a by
.setkey y el operador: =, data.table, R
Gracias
¡fantástico, gracias! estaba cavando a través de las preguntas frecuentes y debe haber perdido esto. – Alex
¿'ad hoc by' es rápido porque también usa clasificación de radix? – colinfang
@colinfang Difícil de responder esa pregunta ya que varias características entran en juego. Las razones varían según la consulta y los datos. Ad hoc 'by' usa radix sorting para encontrar los grupos para las columnas enteras, por lo que depende del tipo y cuántas columnas están 'by'-ed'. Luego, una vez que ha encontrado los grupos, una de las razones por las que la agrupación es rápida es porque la memoria se asigna para el grupo más grande una vez por adelantado, que luego se reutiliza para todos los grupos. Y solo para las columnas que necesita 'j'. Ver Preguntas frecuentes 3.1. Pruebe el modo 'verbose = TRUE' ya que revela cuánto tiempo se dedica a encontrar los grupos (ordenar inc radix) frente a iterarlos. –