data.table: 使用变量名作为setkey的列名

22

我有一个保存在字符串变量which_id中的变量名。

W 是一个 data.table。我如何使用 which_id 调用 setkeyW 上?

这是我尝试过的:

 > 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 key还是没有生效。

 > setkeyv( W , cols=which_id )

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

--> 同样的事情,customer_id_A 键不存在。

有什么提示吗?


1
我认为不需要花哨的eval。你上次尝试使用setkeyv应该可以工作,我想。无论如何,我通常使用eval(parse(text="..."))来进行评估,而你正在使用eval("...") - Frank
“parse” 的调用起到了作用,谢谢。我在想是否有一种“data.table-native”的方法。 - user2105469
1
setkeyv(W, which_id) 对我来说有效,你可能想要让你的问题可复现 - 在特定的 Wwhich_id 中放入。 - eddi
1个回答

25

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接