我已将 a 的名称存储data.table
为 a vector
:
library(data.table)
set.seed(42)
DT <- data.table(x = runif(100), y = runif(100))
names1 <- names(DT)
据我所知,这是一个普通的香草字符向量:
str(names1)
# chr [1:2] "x" "y"
class(names1)
# [1] "character"
dput(names1)
# c("x", "y")
但是,这不是普通的字符向量。这是一个神奇的字符向量!当我向 my 添加新列时data.table
,此向量会更新!
DT[ , z := runif(100)]
names1
# [1] "x" "y" "z"
我知道这与如何:=
通过分配进行更新有关,但这对我来说仍然很神奇,因为我希望<-
复制的名称data.table
。
我可以通过将名称包含在以下内容中来解决此问题c()
:
library(data.table)
set.seed(42)
DT <- data.table(x = runif(100), y = runif(100))
names1 <- names(DT)
names2 <- c(names(DT))
all.equal(names1, names2)
# [1] TRUE
DT[ , z := runif(100)]
names1
# [1] "x" "y" "z"
names2
# [1] "x" "y"
我的问题有两个:
- 为什么不
names1 <- names(DT)
创建名称的副本data.table
?在其他情况下,我们被明确警告会创建s 和s 的<-
副本。data.table
data.frame
names1 <- names(DT)
和有什么区别names2 <- c(names(DT))
?