2013-05-02 11 views
16

Ho un nome di variabile salvato nella variabile stringa which_id.data.table: utilizzando setkey con una variabile nome colonna

W è un data.table. Come posso chiamare setkey su W con which_id?

Questo è quello che ho provato

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

Ma una chiamata a tables() dimostra che la chiave customer_id_A non ha preso. chiave

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

customer_id_A ancora non ha preso.

> setkeyv(W , cols=which_id) 

e

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

-> stessa cosa, customer_id_A chiave non c'è.

Eventuali suggerimenti?

+1

Non credo che occorrerà la fantasia "eval". Il tuo ultimo tentativo, con 'setkeyv' dovrebbe funzionare, credo. Ad ogni modo, il modo in cui di solito faccio le eval è con 'eval (parse (text =" ... "))' considerando che stai facendo 'eval (" ... ")'. – Frank

+0

La chiamata 'parse' ha fatto il trucco, grazie. Mi stavo chiedendo se esistesse un modo "data.table-native". – user2105469

+1

'setkeyv (W, which_id)' funziona per me, potresti rendere riproducibile la tua domanda - inserire specifici 'W' e' which_id' – eddi

risposta

19

setkeyv dovrebbe funzionare. Ecco un esempio riproducibile:

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

Hai ragione, non so cosa mi sia perso. – user2105469

Problemi correlati