2013-05-02 2 views
16

У меня есть имя переменной, сохраненное в строковой переменной which_id.data.table: using setkey с переменной имени столбца

W - это таблица данных.table. Как я могу позвонить setkey по телефону W с номером which_id?

Это то, что я пытался

> eval(paste('setkey(W,' , which_id , ')')) 
[1] "setkey(W, customer_id_A)" 

Но вызов tables() показывает, что ключ customer_id_A не брали.

> evalq(paste('setkey(W,' , which_id , ')')) 
[1] "setkey(W, customer_id_A)" 

customer_id_A ключ все еще не принимаем.

> setkeyv(W , cols=which_id) 

и

> setkeyv(W , cols=c(which_id)) 

-> То же самое, customer_id_A ключ не существует.

Любые указатели?

+1

Я не думаю, что вам понадобятся фантастические вещи 'eval'. По-моему, ваша последняя попытка с 'setkeyv' должна работать. В любом случае, как обычно я делаю evals, это 'eval (parse (text =" ... "))', тогда как вы делаете 'eval (" ... ")'. – Frank

+0

Вызов 'parse' сделал трюк, спасибо. Мне было интересно, есть ли способ «data.table-native». – user2105469

+1

'setkeyv (W, which_id)' работает для меня, вы можете сделать свой вопрос воспроизводимым - введите конкретные 'W' и' which_id' – eddi

ответ

19

setkeyv должно работать. Вот воспроизводимый пример:

library(data.table) 
W <- data.table(customer_id_A = 1:2) 
which_id <- "customer_id_A" 
setkeyv(W, which_id) 
tables() 
##  NAME NROW MB COLS   KEY   
## [1,] W  2 1 customer_id_A customer_id_A 
## Total: 1MB 
+0

Вы правы, я не знаю, что я пропустил. – user2105469

Смежные вопросы