R中data.table的colnames()行为

R中data.table的colnames()行为,r,data.table,R,Data.table,对data.table使用colnames()函数似乎可以将结果变量转换为“通过引用传递”的变量。我使用的是R3.6.0和数据。表1.12.2 library(data.table) DT = data.table( ID = c("b","b","b","a","a","c"), a = 1:6, b = 7:12, c = 13:18 ) column_names = colnames(DT) DT[, e := 23:28] column_names 我希望列_名称为

对data.table使用colnames()函数似乎可以将结果变量转换为“通过引用传递”的变量。我使用的是R3.6.0和数据。表1.12.2

library(data.table)
DT = data.table(
  ID = c("b","b","b","a","a","c"),
  a = 1:6,
  b = 7:12,
  c = 13:18
)

column_names = colnames(DT)
DT[, e := 23:28]
column_names 

我希望列_名称为“ID”、“a”、“b”和“c”,不包括新添加的列“e”。但是,列名称已更新。这种行为正常吗?

我们需要使用
copy
,以避免在根据


执行dt_names=names(dt)时可能需要一个copy()。由于R在修改时复制,dt_名称仍然指向内存中与名称(dt)相同的位置。因此,现在通过引用修改DT,比如通过添加一个新列,DT_名称也将得到更新。为了避免这种情况,必须显式地复制:dt_名称可能与yes重复,这是正确的行为。
column_names = copy(colnames(DT))
DT[, e := 23:28]
column_names 
#[1] "ID" "a"  "b"  "c"