У меня есть таблица data.table с 3 столбцами: тикер, дата и цена. Я сбежал

setkey(prices,ticker,date)

Если я сделаю это из кода, это сработает

prices[list("MSFT",as.Date("2013-01-15")]

Возвращение только строки для MSFT в 2013-01-15 Однако, если я напишу эту функцию

getPrice <- function(ticker,date) {
  prices[list(ticker,date)]
}

Он возвращает всю таблицу data.table. Я подозреваю, что это имеет какое-то отношение к области видимости в параметре i, но я не могу заставить его работать. Как мне запросить data.table, если я не знаю параметры заранее?

1
Juancentro 22 Май 2013 в 01:24
Без ваших данных я не могу подтвердить, но на примере игрушки это отлично работает для меня.
 – 
Justin
22 Май 2013 в 01:30

1 ответ

Лучший ответ

Ваша проблема - это имена переменных в вашей функции. Измените их, например, x и y (чтобы они не совпадали с названиями столбцов в вашем data.table), и все будет работать. Сейчас вы создаете data.table со всеми столбцами ticker и date, а затем присоединяете его, таким образом восстанавливая исходные данные.

Другой (более надежный) вариант - сделать что-то подобное в своей функции:

getPrice <- function(ticker,date) {
  tmp = list(ticker, date)
  prices[tmp]
}

Подробнее об этом см. В разделах часто задаваемых вопросов 2.12 и 2.13 - http: //datatable.r -forge.r-project.org/datatable-faq.pdf

3
eddi 22 Май 2013 в 01:44
Упоминались планы (в НОВОСТИ для версии 1.8.2), чтобы добавить синтаксис .. (), чтобы. () и .. () были аналогичны ./ и ../ файловой системы; т.е.. () оценивается в рамках DT и .. () в родительской области видимости.
 – 
mnel
22 Май 2013 в 03:31