UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

31 lines (30 loc) 1.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fivenum = fivenum; const _stats_ts_1 = require("../_helpers/_stats.js"); function fivenum(x) { // discuss at: https://locutus.io/r/fivenum/ // parity verified: R 4.4 // original by: Kevin van Zonneveld (https://kvz.io) // note 1: Returns Tukey's five-number summary as [min, lower hinge, median, upper hinge, max]. // example 1: fivenum([1, 2, 3, 4]) // returns 1: [1, 1.5, 2.5, 3.5, 4] // example 2: fivenum([1, 2, 3, 4, 5]) // returns 2: [1, 2, 3, 4, 5] // example 3: fivenum([1, 2, 3, 4, 5, 6]) // returns 3: [1, 2, 3.5, 5, 6] const values = (0, _stats_ts_1.sortedRNumbers)(x, 'fivenum'); if (values.length === 0) { return [Number.NaN, Number.NaN, Number.NaN, Number.NaN, Number.NaN]; } const middle = Math.floor(values.length / 2); const lowerHalf = values.length % 2 === 0 ? values.slice(0, middle) : values.slice(0, middle + 1); const upperHalf = values.length % 2 === 0 ? values.slice(middle) : values.slice(middle); return [ values[0] ?? Number.NaN, (0, _stats_ts_1.medianOfSorted)(lowerHalf), (0, _stats_ts_1.medianOfSorted)(values), (0, _stats_ts_1.medianOfSorted)(upperHalf), values[values.length - 1] ?? Number.NaN, ]; }