首页 > 解决方案 > 应用 ':=' 后,Data.table 没有明显返回

问题描述

给定一个函数

testf <- function(dt){

  dt[, t := seq(1:nrow(dt))]
  return(dt)

}

和数据表:

dt <- data.table(a=1, b=2)

在此 data.table 上应用该函数并且未将输出分配给变量时,出于某种原因,我不明白没有生成可见的输出。

testf(dt)
#nothing

但是,当采用相同的功能但在它之前具有打印功能时:

    testf <- function(dt){

      dt[, t := seq(1:nrow(dt))]
      print(dt)
      return(dt)

    }

testd(dt)
   a b t
1: 1 2 1
   a b t
1: 1 2 1

然而,当将输出分配给变量时,输出实际上存储在该变量中,无论函数中是否调用了 print() 函数:

t <- testf(dt)
View(t)
#Output visible

谁能解释我这里出了什么问题?

标签: rdata.table

解决方案


我们需要[]在赋值之后指定

testf <- function(dt){

  dt[, t := seq(1:nrow(dt))][]

}
testf(dt)
#  a b t
#1: 1 2 1

推荐阅读