You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何向data.table添加新列后,已获取的列名向量n会被修改?

data.table列名向量被意外修改的原因

这是因为data.table的names()方法返回的是对列名内部存储的引用,而非独立副本。

你给出的代码里,执行n <- names(d)时,n并没有生成一个全新的列名字符向量,而是直接指向了data.table对象d内部管理列名的内存地址。之后用d[,c:=3,]给d添加新列时,data.table会直接修改这个内部的列名存储(这也是它高效性的核心特性之一——按引用修改数据),所以作为内部存储引用的n,自然就跟着变成更新后的列名了。

如果要避免这种情况,你需要显式创建列名的独立副本,比如用:

n <- copy(names(d))
# 或者
n <- as.character(names(d))

这样n就是完全独立的向量,不会再随d的列名变化而改变。

内容的提问来源于stack exchange,提问作者Funkwecker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:15:32