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