假设我从
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())但语法当然行不通。
我通常的方法是
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返回alist,列表中的每个元素都会成为result中的一列data.table。这是默认的增强模式。
在第一个插图中,类似的行出现了两次vignette("datatable-intro"),但不幸的是,没有像OP这样的示例。(也许应该添加一个?)
我并不是真的想要创建一个列,我只想查看现有列旁边的表达式结果,而不必保存该列然后在以后删除它
对于此用例,最佳解决方案可能是进行浅表复制。该功能尚不可用。
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |