删除函数内的data.table列

Mar*_*kes 6 r dataframe data.table

我有以下示例:

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
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,在调用mod() 函数后索引列仍然存在.删除该行时不是这种情况dat <- dat[2:10].我想,由于行无法通过引用删除,因此创建了另一个data.table.但是,我想删除原始data.table中的索引列.

Mat*_*wle 5

好问题. data.table 复制的电平变化,通过<-以通常方式ř.

它不被复制电平变化由:=set*功能(setkey,setnames,setattr由提供)data.table包.

因此data.table,决定副本的对象本身并没有什么特别之处,并且它作为参数传递给函数的方式完全相同data.frame.这就是你在重要功能中所做的事情.该<-运营商副本上变化并在使用时是没有不同的data.table.的:=操作者,在另一方面,通过参考分配.

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

事实上,在昨晚的伦敦演讲中有一张幻灯片,现在在演示文稿部分的主页上(见带标题的幻灯片copy()).