Will become more natural when https://github.com/Rdatatable/data.table/issues/495 is fixed. I’ll work on this at some point for v1.9.8. I don’t have a time frame yet.
First, for both cases, I’d suggest using `Map()`. Second, as a temporary solution, I’d suggest using `mget()`. #when there is no by it is easy DT[, (rCols) := Map(f, mget(xCols), list(x4))] #when there is a by it fails (offcourse DT$x4 is too big) DT[, (rCols) := Map(f, mget(xCols), list(x4)), by=y] When #495 is fixed, `mget(xCols)` can be replaced with `.SD` along with `.SDcols = xCols`. -- Arun On 14 October 2015 at 13:33:37, statquant3 ([email protected]) wrote: Hello, I am looking to * update several columns by * applying a function f (to each of those columns) that would use those columns AND another one. If there is no "by" I make it work How can I do the same with a "by" : Bellow an example (as I can't be very clear) #data setup library(data.table) set.seed(1) N <- 101 DT <- data.table(x1=rnorm(N),x2=rnorm(N),x3=rnorm(N),x4=rnorm(N),y=letters[sample(5,size=N,replace=T)]) #function to be applied f <- function(x,y){return( frank(x/y,na.last='keep') )} #column names xCols <- paste0('x',1:3) rCols <- paste0('r',1:3) #when there is no by it is easy DT[,(rCols):=lapply(FUN=f,X=.SD,y=DT$x4),.SDcols=xCols] #when there is a by it fails (offcourse DT$x4 is too big) DT[,(rCols):=lapply(FUN=f,X=.SD,y=DT$x4),.SDcols=xCols,by=.(y)] -- View this message in context: http://r.789695.n4.nabble.com/How-can-I-apply-a-function-of-2-columns-to-multiple-other-columns-with-a-by-clause-tp4713576.html Sent from the datatable-help mailing list archive at Nabble.com. _______________________________________________ datatable-help mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
_______________________________________________ datatable-help mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
