可以说我有一些数据存储为data.table对象。 我想创建此对象的备份,并使用data.tables setcolorder替换原始对象的列。 我的备份对象发生以下情况:
testdata <- data.frame(A = 1:10, B = 2:11, C = 3:12)
setDT(testdata)
testdata_backup <- testdata
names(testdata) # [1] "A" "B" "C"
names(testdata_backup) # [1] "A" "B" "C"
setcolorder(testdata, c("C", "B", "A"))
names(testdata) # [1] "C" "B" "A"
names(testdata_backup) # [1] "C" "B" "A"
尽管不更改testdata_backup,但诉诸于testdata看起来会产生影响testdata_backup。我想这与表处理使用的内存处理数据有关。
如果我将备份对象创建为data.frame,它将不会更改:
testdata <- data.frame(A = 1:10, B = 2:11, C = 3:12)
setDT(testdata)
testdata_backup <- data.frame(testdata)
names(testdata) # [1] "A" "B" "C"
names(testdata_backup) # [1] "A" "B" "C"
setcolorder(testdata, c("C", "B", "A"))
names(testdata) # [1] "C" "B" "A"
names(testdata_backup) # [1] "A" "B" "C"
这是setcolorder的故意行为吗? 我使用的功能是否错误?