Median als globale Funktion
Hallo,
nach
https://forum.ninox.com/t/h7hrxav
möchte ich mir den Median als globale Funktion erstellen. Als Parameter müsste ich ein number-array übergeben. Gemäß
https://docs.ninox.com/de/skripten/einfuehrung-in-ninox-skript/eigene-funktionen-erstellen
ist ein solcher Parameter nicht vorgesehen.
Das Skripting hatte ich mir so vorgestellt, dass ich über let eine Variable (z.B. thisArray) im Skript definiere, die eine select-Abfrage mit dem number-array als Output enthält. Mit Median(thisArray) würde dann der Median ausgegeben.
Habt ihr Ideen?
Grüße Maurice
5 Antworten
-
Hallo Maurice,
da gibt es einen kleinen Trick. Es ist nicht möglich einen array an die globale Funktion zu übergeben. Man kann aber ein JSON übergeben, indem man die Input Variable als 'any' deklariert. Im JSON kannst du dann alles mögliche reinpacken. Hier ein Beispiel dazu (Array aufsummieren). Du kannst es ja dann mit der Median Funktion ersetzen:
Der Funktionsaufruf:let thisArray := [1, 2, 3]; arrayFunction({ inputArray: thisArray })
Die global function:
function arrayFunction(input : any) do alert(sum(input.inputArray)) end
-
An dieser Stelle möchte ich die Entwickler von NINOX bitten, die MEDIAN - Funktion so zu implementieren, dass sie erstens als fixe Funktion mit NINOX-NX handhabbar ist und zweitens, dass man sie gleich in die Tabellenfunktion so einbinden kann wie es derzeit für SUMME, DURCHSCHNITT, MINIMUM, MAXIMUM möglich ist.
Gerade in der Medizin wird zu allermeist mit dem MEDIAN und nicht mit MEAN gerechnet, um statistische Ausreißer zu eliminieren. -
Hallo,
ergänzend zu Josef Koenig wünsche ich mir dann noch die Möglichkeit der Boxplot-Darstellung unter den Diagrammen.
-
Hier mal die globale Funktion für das Quantil. Bei Eingabe des Parameters 0.5 wird der Median berechnet. Danke an Christoph für die Idee.
function Quantil(input : any,num : number) do let cntAry := cnt(input.data); let sortAry := sort(for i in range(0, cntAry + 1) do number(item(input.data, i)) end); let idx := round(cnt(sortAry) * num); round(if even(idx) then (number(item(sortAry, idx - 1)) + number(item(sortAry, idx))) / 2 else number(item(sortAry, idx)) end, 1) end;
Die Eingabe des [number] - Arrays, auch mit select(), ist etwas kryptisch, hier für das 25%-Quantil. Mirko
let tab := [1, 2, 2, 3, 4, 3, 2, 5, 6, 7, 4, 5, 9, 7, 11, 12, 23, 33, 32, 24, 26, 16]; Quantil({data: tab}, 0.25)
Content aside
- Status Answered
-
1
„Gefällt mir“ Klicks
- vor 2 JahrenZuletzt aktiv
- 5Antworten
- 101Ansichten
-
4
Folge bereits