1

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

null
    • Fox Concepts
    • Christoph.2
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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
    
    • Josef_Koenig
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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. 

    • Maurice
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo,

    ergänzend zu Josef Koenig  wünsche ich mir dann noch die Möglichkeit der Boxplot-Darstellung unter den Diagrammen. 

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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)
      • Maurice
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko vielen Dank Mirko für die Verallgemeinerung des Medians. Habe jetzt nur mal die Medianfunktion impelementiert (mit festem 0,5 statt num). Werde dann die p-Quantile, falls nötig mit einer zweiten Funktion wie von dir vorgeschlagen 1:1 umsetzen.

      Was ich nicht gefunden habe: der Skripteditor zeigt mir eine Funktion median (mit kleinem m) an. Ich konnte aber nicht herausfinden, was und nach welcher Syntax da etwas berechnet wird. Weiß dazu jemand mehr?

Content aside

  • Status Answered
  • 1 „Gefällt mir“ Klicks
  • vor 1 JahrZuletzt aktiv
  • 5Antworten
  • 90Ansichten
  • 4 Folge bereits