ACTUALIZACIÓN: Antiguo pregunta ... se resolvió mediante v1.5.3 data.table en febrero de 2011.R: Cuando uso data.table, ¿cómo obtengo las columnas de y cuando hago x [y]?
Estoy tratando de utilizar el paquete data.table
, y realmente como las aceleraciones que estoy recibiendo, pero estoy confundido por este error cuando hago x[y, <expr>]
donde x
y y
son "tablas de datos" con la misma clave, y <expr>
contiene nombres de columna de tanto x
y y
:
require(data.table)
x <- data.table(foo = 1:5, a = 5:1)
y <- data.table(foo = 1:5, boo = 10:14)
setkey(x, foo)
setkey(y, foo)
> x[y, foo*boo]
Error in eval(expr, envir, enclos) : object 'boo' not found
UPDA TE ... para aclarar la funcionalidad Busco en el ejemplo anterior: Necesito hacer el equivalente de los siguientes:
with(merge(x,y), foo*boo)
Sin embargo de acuerdo con el siguiente fragmento de la data.table
FAQ, esto debería haber trabajado :
por último, a pesar de que parece como si x [y] no devuelve las columnas en y, en realidad se puede utilizar las columnas de y en la expresión j. Esto es lo que significa al unir alcance heredado. ¿Por qué no simplemente devuelve la unión de todas las columnas de xey y luego ejecuta expresiones sobre eso? Se reduce a eciencia de código y lo que es más rápido para programar. Cuando escribe x [y, foo boo], data.table automáticamente inspecciona la expresión j para ver qué columnas utiliza. Solo subconjunto, o grupo, esas columnas solamente. La memoria solo se crea para las columnas que utiliza j . Digamos que foo está en x, y boo está en y (junto con otras 20 columnas en y). ¿No es x [y, foo boo] más rápido al programa y más rápido de ejecutar que un paso de fusión seguido de otro subconjunto paso?
Soy consciente de this question que abordó un problema similar, pero no parece haberse resuelto satisfactoriamente. ¿Alguien sabe lo que me estoy perdiendo o entendiendo mal? Gracias.
ACTUALIZACIÓN: pregunté en la lista de correo de ayuda de la tabla de datos y el autor del paquete (Matthew Dowle) replied que de hecho las preguntas más frecuentes antes citadas son incorrectas, por lo que la sintaxis que estoy utilizando no funcionará actualmente, es decir, no puedo consultar las columnas y
en el argumento j
(es decir, el segundo) cuando hago x[y,...]
.
Pero lo solicitó hace un tiempo y fue tratado por v1.5.3 lanzado a CRAN en febrero de 2011. Consulte las NOTICIAS, las nuevas preguntas frecuentes sobre data.table y las corregidas. –
@Matthew, gracias, sí, sé que ha sido abordado por el último lanzamiento, y me alegra que lo haya indicado aquí, así que está claro para los demás. –