R 中 data.table 的 colnames() 行为
Posted
技术标签:
【中文标题】R 中 data.table 的 colnames() 行为【英文标题】:colnames() behaviour with data.table in R 【发布时间】:2019-06-19 09:16:03 【问题描述】:将 colnames() 函数与 data.table 一起使用似乎会将结果变量转换为“通过引用传递”的变量。我正在使用 R 3.6.0 和 data.table 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
我希望 column_names 是“ID”“a”“b”和“c”,不包括新添加的“e”列。但是 column_names 已更新。这种行为正常吗?
【问题讨论】:
Why does data.table update names(DT) by reference, even if I assign to another variable?的可能重复 是的,这是正确的行为。 【参考方案1】:我们需要使用copy
来避免它在分配后根据?copy
的文档被更改
执行 dt_names = names(DT) 时可能需要一个 copy()。由于 R 的修改时复制,dt_names 仍然指向与名称(DT)相同的内存位置。因此,现在通过引用修改 DT,比如添加一个新列,dt_names 也将得到更新。为避免这种情况,必须明确复制: dt_names
所以,我们做到了
column_names = copy(colnames(DT))
现在,在分配之后
DT[, e := 23:28]
column_names
#[1] "ID" "a" "b" "c"
【讨论】:
以上是关于R 中 data.table 的 colnames() 行为的主要内容,如果未能解决你的问题,请参考以下文章