Tôi xin lỗi nếu tôi không được phép gửi một cái gì đó ở đây là không phải là một câu trả lời , nhưng bài của tôi là quá dài cho một nhận xét.
Tôi muốn chỉ ra giải pháp của janosdivenyi rằng thêm một trailing []
-dt
không phải lúc nào cung cấp cho các kết quả mong đợi (ngay cả khi sử dụng data.table 1.9.6 hoặc 1.10.4) như tôi làm dưới đây.
Các ví dụ dưới đây cho thấy rằng nếu dt
là dòng cuối cùng trong hàm người ta có hành vi mong muốn mà không cần sự hiện diện của trailing []
, nhưng nếu dt
không phải là trên dòng cuối cùng trong hàm sau đó một trailing []
là cần thiết để có được hành vi mong muốn.
Ví dụ đầu tiên cho thấy rằng không có đuôi []
trên dt
chúng tôi nhận được hành vi mong đợi khi dt
là trên dòng cuối cùng của hàm
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
df <- 1
dt[, z := y - x]
}
myfunction(mydt) # Nothing printed as expected
mydt # Content printed as desired
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
Thêm một trailing []
trên dt
cho hành vi bất ngờ
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
df <- 1
dt[, z := y - x][]
}
myfunction(mydt) # Content printed unexpectedly
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
mydt # Content printed as desired
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
Di chuyển df <- 1
đến sau dt không có dấu sau []
cho unexpec ted hành vi
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
dt[, z := y - x]
df <- 1
}
myfunction(mydt) # Nothing printed as expected
mydt # Nothing printed unexpectedly
Moving df <- 1
sau khi dt với một trailing []
cung cấp cho các dự hành vi
mydt <- data.table(x = 1:3, y = 5:7)
myfunction <- function(dt) {
dt[, z := y - x][]
df <- 1
}
myfunction(mydt) # Nothing printed as expected
mydt # Content printed as desired
## x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
đọc này: https://github.com/Rdatatable/data.table/blob/master /NEWS.md#bug-fixes-3. BUG đầu tiên đã được sửa trong phiên bản 1.9.6 –
Xem phần 2.23 của câu hỏi thường gặp 'data.table' (' vignette ("datatable-faq", package = "data.table") ') – Uwe