2013-05-02 29 views
16

Tôi có một tên biến được lưu vào biến chuỗi which_id.data.table: sử dụng setkey với biến tên cột

W là dữ liệu.table. Làm cách nào để gọi số setkey trên W với which_id?

Đây là những gì tôi đã cố gắng

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

Nhưng một cuộc gọi đến tables() cho thấy rằng chìa khóa customer_id_A đã không mất.

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

customer_id_A phím vẫn không mất.

> setkeyv(W , cols=which_id) 

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

-> điều tương tự, customer_id_A trọng không phải là ở đó.

Mọi con trỏ?

+1

Tôi không nghĩ rằng công cụ 'eval' lạ mắt sẽ là cần thiết. Lần thử cuối cùng của bạn, với 'setkeyv' sẽ hoạt động, tôi nghĩ vậy. Dù sao, cách tôi thường làm evals là với 'eval (parse (text =" ... "))' trong khi bạn đang làm 'eval (" ... ")'. – Frank

+0

Cuộc gọi 'parse' đã thực hiện mẹo, cảm ơn. Tôi đã tự hỏi nếu có một cách 'data.table-native'. – user2105469

+1

'setkeyv (W, which_id)' hoạt động đối với tôi, bạn có thể muốn làm cho câu hỏi của bạn có thể lặp lại - đặt vào 'W' và' which_id' cụ thể – eddi

Trả lời

19

setkeyv sẽ hoạt động. Dưới đây là ví dụ có thể tái sản xuất:

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

Bạn nói đúng, tôi không biết mình đã bỏ lỡ điều gì. – user2105469

Các vấn đề liên quan