我想对 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)]
我们能做得更好吗?
最佳答案
只需删除 .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)]
关于使用 .SD 检索 lapply 内的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17420132/