ОБНОВЛЕНИЕ: старый вопрос... он был разрешен data.table v1.5.3 в феврале 2011 года.
Я пытаюсь использовать пакет data.table
, и мне очень нравятся ускорения, которые я получаю, но я столкнулся с этой ошибкой, когда я делаю x[y, <expr>]
, где x
и y
являются "таблицами данных", с тем же ключом и <expr>
содержит имена столбцов как x
, так и 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
UPDATE... Чтобы прояснить функциональность, которую я ищу в приведенном выше примере: мне нужно сделать следующее:
with(merge(x,y), foo*boo)
Однако, согласно приведенному ниже из data.table
часто задаваемых вопросов, это должно сработать:
Наконец, хотя кажется, что x [y] не возвращает столбцы в y, вы можете фактически использовать столбцы из y в выражении j. Это то, что мы означает объединение наследуемой области. Почему нет просто верните союз всех столбцы от x и y, а затем запустить выражения по этому поводу? Это сводится к эффективность кода и что быстрее программировать. Когда вы пишете x [y, fooboo], data.table автоматически проверяет выражение j, чтобы увидеть, какой которые он использует. Он будет только подмножеством, или группы, только эти столбцы. Память создается только для столбцов j использует. Пусть говорят, что foo находится в x и boo находится в y (вместе с 20 другими столбцами в y). Это не x [y, fooboo] быстрее программы и быстрее запускать, чем шаг слияния, за которым следует другое подмножество шаг?
Я знаю этот вопрос, который рассматривал аналогичную проблему, но, похоже, она не была удовлетворительно решена. Кто-нибудь знает, что мне не хватает или непонимания? Спасибо.
ОБНОВЛЕНИЕ: я спросил в списке рассылки справки таблицы данных и автора пакета (Matthew Dowle) ответил, что действительно часто цитируемый FAQ неверно, поэтому синтаксис, который я использую, в настоящий момент не работает, т.е. я не могу ссылаться на столбцы y
в аргументе j
(т.е. втором), когда я делаю x[y,...]
.