提问人:MEcon 提问时间:5/31/2023 更新时间:5/31/2023 访问量:45
R 函数由 value 调用,而不是对事先调用 names() <- 的 data.table 的引用
r function called by value instead of reference on a data.table that had a names() <- call beforehand
问:
我们知道有 4 种数据类型提供可变对象或按引用传递语义,并且是其中之一。(R 的最佳编码实践第 11 章R
data.table
)
在下面的一段代码中,首先我创建一个函数,该函数将向输入 data.table 添加一个变量。作为引用传递,这应该会更改发送到函数中的 data.table 并添加一列。
我创建了两个基本相同的 s,我用不同的方法将它们的列名更改为大写,然后将它们传递到函数中,但函数之后的对象并不相同!data.table
data.table
library(data.table)
f <- function(x){
x[,newvar:=2020]
}
dt1 <- data.table(a=1:20,b=21:40)
dt2 <- data.table(a=1:20,b=21:40)
names(dt1) <- toupper(names(dt1))
setnames(dt2,toupper(names(dt2)))
names(dt1)
class(dt1)
str(dt1)
names(dt2)
class(dt2)
str(dt2)
f(dt1)
f(dt2)
names(dt1)
names(dt2)
这两个对象现在不同了。 不包含 !dt1
newvar
为什么?
答: 暂无答案
评论
truelength(dt1); truelength(dt2)
names<-
setnames
truelength(DT)
length(DT)
help("truelength")
names<-.data.table