data.table as of v1.16.0 now allows for the following:
data.table
dt[, names(.SD) := lapply(.SD, fx)]
and
dt[, names(.SD) := lapply(.SD, fx), .SDcols = is.numeric].
dt[, names(.SD) := lapply(.SD, fx), .SDcols = is.numeric]
So, you could run:
dt[ , names(.SD) := lapply(.SD, "*", -1), .SDcols = cols]