simple-statistics
simple-statistics copied to clipboard
datapoint labels
is there a way to label datapoints to know their origin?
array = [{id:'1', value: 1}, {id:'2', value: 2}]
max(array)
// or at least something like:
array = [[1,'x'], [2,'y']]
There currently isn't. I suppose one API that we could expose for this purpose would be something like maxIndex
array = [{id:'1', value: 1}, {id:'2', value: 2}]
index = maxIndex(array.map(item => item.value))
value = array[index].value;
label = array[index].label;
I'm open to this idea, though it does seem like a fairly narrow idea - right now you could get the same effect with:
array = [{id:'1', value: 1}, {id:'2', value: 2}]
maxValue = max(array.map(item => item.value));
maxItem = array.find(item => item.value === maxValue)
This difference only being that the second requires a relatively cheap (maximum O(n)) lookup step.
The typical solution to this kind of problems is to let users give a function returning the "key" that should serve for comparisons. This is what is achieved by the key kwarg of python's max builtin function and the way _.maxBy is implemented in lodash for instance:
array = [{id:'1', value: 1}, {id:'2', value: 2}]
maxItem = max(array, item => item.value)
But this does not serve exactly the same intent as a maxIndex function as sometimes you really want the index for other reasons. In a perfect world one should have those three functions, but it puts a lot of pressure on the lib's implementation and footprint since it means using sneaky solutions to avoid duplicating too much code all while remaining as performant as possible and if you do so for max, you should probably do so for min and a lot of other functions as well.