我想在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")]
答案 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
中使用的函数的参数也必须命名。