user2105469 user2105469 - 1 month ago 12
R Question

data.table: using setkey with a column name variable

I have a variable name saved into the string variable

which_id
.

W
is a data.table. How do I call
setkey
on
W
with
which_id
?

This is what I've tried

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


But a call to
tables()
shows that the
customer_id_A
key didn't take.

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


customer_id_A
key still didn't take.

> setkeyv( W , cols=which_id )


and

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


--> same thing,
customer_id_A
key isn't there.

Any pointers? Thanks.

Answer

setkeyv should work. Here is a reproducible example:

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