2017-07-28 14 views
8

Các mã sau đây không làm việc nhưng tôi không thể tìm thấy bất kỳ tài liệu về ".." (dot dot) điều hành trong data.table giúp đỡ và họa tiết:Tại sao ".." làm việc để chuyển tên cột trong một biến vector ký tự?

library(data.table) 
cols <- c("mpg", "gear") 
DT <- as.data.table(mtcars) 
DT[, ..cols] 

Đầu ra là:

 mpg gear 
1: 21.0 4 
2: 21.0 4 
3: 22.8 4 
4: 21.4 3 
5: 18.7 3 
... 

Tại sao điều này có hiệu quả không, liệu có tài liệu nào về điều đó không?

PS: Bình thường, tôi sẽ sử dụng mget vv ...

Sửa 1: Đây không phải là một tính năng R đồng bằng trong những cái tên reserved ..., ..1, ..2 vv, được sử dụng để tham khảo luận được chuyển xuống từ một chức năng gọi điện (xem ?Reserved). Ví dụ của tôi không sử dụng số, nhưng ký tự sau hai dấu chấm.

Chỉnh sửa 2: Đây không phải là trùng lặp, như ví dụ của Rich Scriven cho thấy:

> mtcars[, ..cols] 
Error in `[.data.frame`(mtcars, , ..cols) : object '..cols' not found 
+2

Nó không phải data.table, nó chỉ là R: https://stackoverflow.com/questions/19997231/two-dots-in-r –

+0

@RichScriven Tôi đã đọc như vậy và nếu bạn đào sâu vào với nó nói rằng nó tương đương với 'DT [, .SD, .SDcols = cols]' – Masoud

Trả lời

7

Đây là một mới, nghiệm tính năng được thêm vào trong data.table v1.10.2. Nó được giải thích trong NEW FEATURES section of the data.table news for changes in v1.10.2.

nó đọc (trích dẫn trực tiếp):

Khi j là một biểu tượng bắt đầu bằng .. nó sẽ được nhìn lên kêu gọi phạm vi và giá trị của nó đưa đến là tên cột hoặc số.

myCols = c("colA","colB") 
DT[, myCols, with=FALSE] 
DT[, ..myCols]    # same 

Khi bạn nhìn thấy tiền tố .. nghĩ một cấp-up như thư mục .. trong tất cả các hệ điều hành có nghĩa là thư mục cha. Trong tương lai, tiền tố .. có thể được thực hiện để hoạt động trên tất cả các ký hiệu có trong bất kỳ nơi nào bên trong DT[...]. Nó được dự định là một cách thuận tiện để bảo vệ mã của bạn khỏi vô tình chọn một tên cột. Tương tự như cách tiền tố x.i. (tương tự như bí danh bảng SQL) có thể đã được sử dụng để định hướng cùng một tên cột hiện diện trong cả hai xi. Tiền tố biểu tượng thay vì hàm ..() sẽ dễ dàng hơn cho chúng tôi để tối ưu hóa nội bộ và thuận tiện hơn nếu bạn có nhiều biến trong phạm vi gọi mà bạn muốn sử dụng trong biểu thức của mình một cách an toàn. Tính năng này lần đầu tiên được nâng lên vào năm 2012 và mong muốn cho, #633. Nó là thử nghiệm.

Lưu ý:This answer by Arun dẫn tôi đến thông tin này.

+0

Tính năng tuyệt vời, nhưng vẫn ** thử nghiệm ** và do đó chưa được ghi lại :-(https://github.com/Rdatatable/data.table/issues/2145 –

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