gpt4 book ai didi

r - 删除函数内data.table的列

转载 作者:行者123 更新时间:2023-12-04 11:58:43 25 4
gpt4 key购买 nike

我有以下示例:

irisDT <- as.data.table(iris)

mod <- function(dat) {
dat[, index:=(1:nrow(dat))]
setkey(dat, index)

dat <- dat[2:10]

dat[, index:=NULL]
invisible()
}

mod(irisDT)
names(irisDT) # it contains index

令我惊讶的是,在调用 mod() 后,索引列仍然存在。
功能。
当我删除行 dat <- dat[2:10] 时,情况并非如此。 .
我想,由于行不能通过引用删除,另一个
data.table 已创建。
但是,我想删除原来的索引列
数据表。

最佳答案

很好的问题。 data.table 更改时复制,作者 <- ,以通常的 R 方式。
:= 不会在更改时复制它或 set*setkey 提供的函数( setnamessetattrdata.table )包裹。

所以data.table没什么特别的决定复制与否的对象本身,它作为参数传递给函数的方式与 data.frame 完全相同。 .重要的是您在函数内对其进行的操作。 <-操作符在更改时复制,在 data.table 上使用时没有什么不同. :=另一方面,运算符按引用分配。

正如您所说,(还)无法通过引用删除行,因此在此之前您需要使用标准 R 语法将副本分配回调用范围中的符号。

碰巧的是,在昨晚的 LondonR 演讲中有一张幻灯片,现在在 homepage 上。在演示部分下(请参阅标题为 copy() 的幻灯片)。

关于r - 删除函数内data.table的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11118850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com