R: Lorsque vous utilisez data.table comment puis-je obtenir des colonnes de y quand je fais x [y]?
-
16-10-2019 - |
Question
UPDATE :. Vieille question ... il a été résolu par data.table v1.5.3 en février 2011
Je suis en train d'utiliser le paquet data.table
, et vraiment comme les speedups que je reçois, mais je suis déconcerté par cette erreur quand je fais x[y, <expr>]
où x
et y
sont « données-tables » avec la même clé, et <expr>
contient les noms de colonnes des deux x
et 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
Mise à jour ... Pour clarifier la fonctionnalité que je cherche dans l'exemple ci-dessus: je dois faire l'équivalent de ce qui suit:
with(merge(x,y), foo*boo)
Toutefois, selon l'extrait ci-dessous de la FAQ data.table
, cela aurait dû fonctionner:
Enfin, bien qu'il semble que x [y] ne retourne pas les colonnes y, vous pouvez réellement utiliser les colonnes de y dans l'expression de j. C'est ce que nous dire par se joindre à la portée héritée. Pourquoi pas il suffit de retourner l'union de tous les colonnes de x et y et ensuite exécuter expressions à ce sujet? Il se résume à ecacité de code et ce qui est plus rapide pour programmer. Lorsque vous écrivez x [y, foo boo], data.table automatiquement inspecte l'expression de j pour voir quelles il utilise des colonnes. Il ne sous-ensemble, ou d'un groupe, ces colonnes ne. Mémoire est créée uniquement pour les colonnes j les usages. foo de dire Let est en x et boo est en y (ainsi que 20 d'autres colonnes en y). Is not x [y, foo boo] plus rapide à programme et plus rapide à courir qu'un l'étape de fusion suivie d'un autre sous-ensemble étape?
Je suis conscient de cette question adressé une question similaire, mais il ne semble pas avoir été résolus de façon satisfaisante. Tout le monde sait ce que je suis absent ou malentendu? Merci.