const std::string columnName = "x"; ROOT::EnableImplicitMT(2); auto rdf = ROOT::RDataFrame(5); auto d = rdf.Define(columnName, "rdfentry_ + 1."); auto aggregator = [](double acc, double x) { return acc * x; }; auto merger = [](std::vector &accumulators) { auto size = accumulators.size(); for (int i = 1; i < size; ++i) { accumulators[0] *= accumulators[i]; } }; double initValue = 1.; auto result = d.Aggregate(aggregator, merger, columnName, initValue); std::cout << *result << std::endl; gROOT->GetListOfCanvases()->Draw()