7

我想对 data.table 中的所有列应用一个函数。因此,我将 .SD 与 lapply 一起使用。但是,在 lapply 内部,我无法检索表格的列。

例如

x = data.table(a=1:10, b=10:1, id=1:5)
x[,lapply(.SD,function(t){t*id}),.SDcols=c(1,2)]
Error in ..FUN(a) : object 'id' not found

我执行以下操作:

x[,lapply(.SD,function(t){t*x$id}),.SDcols=c(1,2)]

我们能做得更好吗?

4

1 回答 1

5

只需删除.SDcols=c(1,2). 删除第三列 ( id)

 > x[,lapply(.SD,function(t){t*id})]
     a  b id
 1:  1 10  1
 2:  4 18  4
 3:  9 24  9
 4: 16 28 16
 5: 25 30 25
 6:  6  5  1
 7: 14  8  4
 8: 24  9  9
 9: 36  8 16
10: 50  5 25

如果没有id,以下所有方法都可以:

x[,lapply(.SD[,list(a,b)], `*`, id)]

x[,lapply(.SD[,-3], `*`, id)]

x[,lapply(.SD, `*`,id)][, list(a,b)]
于 2013-07-02T08:02:30.130 回答