2011-11-06 26 views
24

Trong khi kiểm tra mã của tôi, tôi phát hiện ra những điều sau đây: Nếu tôi gán một data.table DT1 để DT và thay đổi DT sau đó, DT1 thay đổi với nó. Vì vậy, DTDT1 dường như được liên kết nội bộ. Hành vi này có dự định không? Mặc dù tôi không phải là chuyên gia lập trình, điều này có vẻ sai với tôi và thử nghiệm nó với các biến R đơn giản hoặc data.frame, tôi không thể tạo lại hành vi. Điều gì đang xảy ra ở đây?: = (vượt qua bằng cách tham khảo) điều hành trong gói data.table đổi một đối tượng bảng dữ liệu đồng thời

DF <- data.frame(ID=letters[1:5], 
        value=1:5) 
DF1 <- DF 
all.equal(DF1, DF) 
[1] TRUE 
DF[1, "value"] <- DF[1, "value"]*2 
all.equal(DF1, DF) 
[1] "Component 2: Mean relative difference: 1" 

library(data.table) 
data.table 1.7.1 For help type: help("data.table") 
DT <- data.table(ID=letters[1:5], 
        value=1:5) 
DT1 <- DT 
all.equal(DT1, DT) 
[1] TRUE 
DT[, value:=value*2] 
    ID value 
[1,] a  2 
[2,] b  4 
[3,] c  6 
[4,] d  8 
[5,] e 10 
all.equal(DT1, DT) 
[1] TRUE 

Trả lời

24

Tài liệu này trong data.table sẽ giúp ích. ? data.table::copy

Không có giá trị nào được trả về. Data.table được sửa đổi theo tham chiếu. Nếu bạn cần một bản sao, trước tiên hãy lấy một bản sao (sử dụng DT2 = copy (DT)). copy() đôi khi cũng có thể hữu ích trước đây: = được sử dụng để gán cho một cột bằng cách tham chiếu.

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