如何选择所有列以及其他表达式

Dea*_*gor 3 r data.table

假设我从

mtcarsDT<-data.table(mtcars)
Run Code Online (Sandbox Code Playgroud)

我想要相当于

mtcarsDT[,.(mpg, cyl,  disp,  hp, drat,    wt,  qsec, vs, am, gear, carb, newcol=myFunc())]
Run Code Online (Sandbox Code Playgroud)

但我只想输入简短的内容,mtcarsDT[,.(.SD, newcol=myFunc())但语法当然行不通。

Fra*_*ank 6

我通常的方法是

c(.SD, .(newcol = f())
Run Code Online (Sandbox Code Playgroud)

将函数应用于多个列时,例如,这种方法也很有用

c(
  g = lapply(.SD, g),
  f = lapply(.SD, f),
  .(N = .N)
)
Run Code Online (Sandbox Code Playgroud)

此语法有效是因为

  • 返回值应该是(列的)列表;
  • .SD 已经是列表;
  • c()可用于合并列表;和
  • .()list()为了方便内部提供的别名DT[...]

细节。从?data.table

只要j返回a list,列表中的每个元素都会成为result中的一列data.table。这是默认的增强模式。

在第一个插图中,类似的行出现了两次vignette("datatable-intro"),但不幸的是,没有像OP这样的示例。(也许应该添加一个?)

我并不是真的想要创建一个列,我只想查看现有列旁边的表达式结果,而不必保存该列然后在以后删除它

对于此用例,最佳解决方案可能是进行浅表复制。该功能尚不可用