假设我有以下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函数干净/优雅地执行此操作?非常感谢。
答案 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]