1 | import { Formula } from '@analys/formula';
|
2 | import { samplesFind } from '@analys/samples-find';
|
3 | import { argnames } from '@spare/deco-func';
|
4 | import { mutazip } from '@vect/vector-zipper';
|
5 |
|
6 | const samplesFormula = function (formulae, {
|
7 | filter,
|
8 | append = true
|
9 | } = {}) {
|
10 | let samples = this;
|
11 |
|
12 | if (filter) {
|
13 | samples = samplesFind.call(samples, filter);
|
14 | }
|
15 |
|
16 | for (let indicator in formulae) if (formulae.hasOwnProperty(indicator)) {
|
17 | const func = formulae[indicator];
|
18 | formulae[indicator] = [argnames(func), func];
|
19 | }
|
20 |
|
21 | const formulaEngine = new Formula(formulae);
|
22 | const results = formulaEngine.calculate(samples).toSamples();
|
23 | return append ? mutazip(samples, results, (sample, result) => Object.assign(sample, result)) : results;
|
24 | };
|
25 |
|
26 | export { samplesFormula };
|