kato-m
6/7/2017 - 1:02 PM

Apply function to .SDcols and group by

Apply function to .SDcols and group by

capture_dput <- function(x){
  paste(capture.output(dput(x)), collapse = '')
}

define_vars <- function(...) {
  
  vs <- lazyeval::lazy_dots(...)
  
  varnames <- unname(sapply(vs, function(v) as.character(v$expr)))
  
  
  dputs <- sapply(vs, function(v) {
    v$expr <- substitute(capture_dput(x), list(x = v$expr))
    lazyeval::lazy_eval(v)
  })
  
  paste(varnames, dputs, sep = " <- ")
  
}

my_var = list(a = c(1,2,3), b = "test")
define_vars(my_var)
cols_to_scale <- grep('^(AVG|MIN|MAX|RNG|LST|FST)',colnames(atab), value = T)
atab[, 
    (cols_to_scale) := lapply(.SD, function(col){scale(col)[,1]}), 
    .SDcols = cols_to_scale,
    by = LINE]