Как использовать специфичные для столбца аргументы в функции с несколькими аргументами?
Использовать mapply(FUN, dat, params1, params2, ...)
где каждый из params1, params2, ...
может быть списком или вектором;mapply
выполняет итерации по каждому из dat, params1, params2, ...
параллельно.
Обратите внимание, что в отличие от остальной части семейства apply/lapply/sapply
, с mapply
сначала идет аргумент функции, затем данные и параметр (ы).
В вашем случае (псевдокод, вам нужно настроить его для запуска) что-то вроде:
Вместо вложенного списка wlevel <- list(b=list(lower=0.01,upper=0.99), c=list(upper=0.02,upper=0.95))
, вероятно, проще распаковать в:
w_lower <- list(b=0.01, c=0.02)
w_upper <- list(b=0.99, c=0.95)
DT[ , c('b','c') := mapply(function(x, w_lower_col, w_upper_col) { winsorize(x, w_lower_col, w_upper_col) },
.SD, w_lower, w_upper), .SDcols = c('b', 'c')]
Нам не нужно использовать имена столбцов (ваш zzz
) при индексации в списке, mapply()
следует просто перебирать список как есть.