R data.table根据列表中的参数将函数应用于列的子集

时间:2014-06-16 01:32:10

标签: r data.table apply lapply

假设我有以下data.table z = data.table(val1 = 1:11,val2 = 3:13)。除此之外,我还有一个参数列表,如下所示lambda = list(c(2,1),c(4,2))。我想要完成的是将变换应用于data.table的两列,如下所示

val1 = val1^param1 + param2
val2 = val2^param3 + param4

其中param1,param2,param3,param4作为对存储在列表lambda中。我尝试了以下但它给了我一个错误

z[,(1:2) := lapply(.SD, function(x,y) {return(x^y[[0]] + y[[1]])},lambda),.SDcols = 1:2]
Error in y[[0]] : attempt to select less than one element

有没有办法在data.table或使用任何apply函数干净/优雅地执行此操作?非常感谢。

1 个答案:

答案 0 :(得分:3)

不确定这是否有效,但你可以在data.table之外工作:

Map(function(a,b) a^b[1] + b[2], z, lambda)

可以适应

z[,Map(function(a,b) a^b[1] + b[2], .SD, lambda),.SDcols=1:2]