Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用.SD检索lappy中的列名_R_Data.table - Fatal编程技术网

R 使用.SD检索lappy中的列名

R 使用.SD检索lappy中的列名,r,data.table,R,Data.table,我想对data.table中的所有列应用一个函数。因此,我将.SD与lapply一起使用。但是,在lappy中,我无法检索表的列 比如说 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}),.SDcol

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

比如说

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

要不具有
id
,以下所有操作都将起作用:

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

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

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

谢谢有没有办法避免在i列上应用该函数?@Nicolas请检查我的编辑。小提示,如果你介意速度,请尽量给你的函数提供最紧凑的结构(通常这意味着更快的代码)。我喜欢你给出的三种选择中的第一种,尽管使用
.SD
会变得多余。我认为
x[,lapply(列表(a,b),
*
,id)]
是最好的解决方案,它只需要输入
.SDcols
。嗨,我实际上不使用
SDcols
。对于这个特定的情况,您是对的(尽管保存的输入时间差异很小,但我需要检查一下)
Lappy
+
.SD
对于具有许多列的数据表来说是最佳实践(出于明显的原因)。
x[,lapply(.SD[,list(a,b)], `*`, id)]

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

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