使用.SDcols时,将data.table列传递给函数

时间:2015-05-06 02:24:33

标签: r data.table

我想在DT[, lapply(.SD, func), by=group, .SDcols=cols]中使用data.table语法,但我想将DT列传递给func()。有没有办法让这个工作?例如,

indexfunc <- function(col, indexcol, indexvalue)
  col/col[indexcol==indexvalue]

DT <- data.table(group=c('A','A','B','B'), indexkey=c(1,2,1,2), value=1:4)

# Works
DT[, indexfunc(value, indexkey, 2), by=group]

# Fails, Error in indexfunc(value, indexkey, 2) : object 'indexkey' not found
DT[, lapply(.SD, indexfunc, indexkey, 2), by=group, .SDcols=c("value")]

1 个答案:

答案 0 :(得分:3)

我认为这里的策略必然会带来糟糕的编程,但

DT[,lapply(
  .SD[,"value",with=FALSE], 
  indexfunc,indexcol= indexkey,indexvalue= 2
), by=group]

给出输出

   group value
1:     A  0.50
2:     A  1.00
3:     B  0.75
4:     B  1.00

OP中的方法不起作用,因为.SDcols限制了j DT[i,j]中可用的列集。我认为lapply中使用的函数的参数也必须命名。

相关问题