Another approach.
require(data.table) # Create data dt <- data.table(x = c(1,2,5), y = c(2,3,1), z = c(3,4,2)) # Create index dt[, i := .I] # Compute sum and prod dt[, sum := sum(x, y, z), by = i] dt[, prod := prod(x, y, z), by = i] dt # Compute sum and prod using .SD dt[, c("sum", "prod") := NULL] dt dt[, sum := sum(.SD), by = i, .SDcols = c("x", "y", "z")] dt[, prod := prod(.SD), by = i, .SDcols = c("x", "y", "z")] dt # Compute sum and prod using .SD and list dt[, c("sum", "prod") := NULL] dt dt[, c("sum", "prod") := list(sum(.SD), prod(.SD)), by = i, .SDcols = c("x", "y", "z")] dt # Compute sum and prod using .SD and lapply dt[, c("sum", "prod") := NULL] dt dt[, c("sum", "prod") := lapply(list(sum, prod), do.call, .SD), by = i, .SDcols = c("x", "y", "z")] dt