Creazione di una funzione statistica personalizzata (formula) che ha byVarIn relazione a questo elemento della lista dei desideri che ho creato: Aggiungi normalizzazione e robuste funzioni statistiche (e funzioni di matrice) . Ho pensato di poter provare a scriverle come funzioni personalizzate per ora (anche se so che sarà impossibile condividerle e aggiornarle per tutti), ma ho affrontato quasi immediatamente il mio primo problema: come fare riferimento alle colonne... Quando utilizzo le formule personalizzate, sono bloccato utilizzando calcoli a livello di riga o riferimenti a colonne come stringhe invece di :colname che mi impedirebbe di utilizzarli direttamente dall'editor di formule.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
my_min = New Custom Function(
"custom",
"My Min1",
Function({x, y},
As Constant(
vals = Column(x) << get values;
groups = Column(y) << get values;
);
cur_group = Loc(groups, As Column(y));
vals[cur_group[Loc Min(vals[cur_group])]];
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
my_min = New Custom Function(
"custom",
"My Min2",
Function({x, y},
Col Minimum(Column(x), Column(y));
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
my_min = New Custom Function(
"custom",
"My Min3",
Function({x, y},
Col Minimum(x, y);
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
dt << New Column("ColMin", Numeric, Continuous, Formula(Col Minimum(:height, :sex)));
dt << New Column("MyMin1_str", Numeric, Continuous, Formula(custom:My Min1("height", "sex")));
dt << New Column("MyMin2_str", Numeric, Continuous, Formula(custom:My Min2("height", "sex")));
dt << New Column("MyMin3_str", Numeric, Continuous, Formula(custom:My Min3("height", "sex")));
dt << New Column("MyMin1_ref", Numeric, Continuous, Formula(custom:My Min1(:height, :sex)));
dt << New Column("MyMin2_ref", Numeric, Continuous, Formula(custom:My Min2(:height, :sex)));
dt << New Column("MyMin3_ref", Numeric, Continuous, Formula(custom:My Min3(:height, :sex)));Tabella datiScriptingOggetto: creazione di una funzione statistica personalizzata (formula) con byVarElemento della lista dei desideri che credo renderebbe tutto molto più semplice:
Opzione o funzione per valutare una formula di colonna personalizzata in una sola volta o memorizzare nella cache i valori tra le righe
Oggetto: creazione di una funzione statistica personalizzata (formula) con byVarDue commenti:
- Non riesco a trovare il riferimento ad esso, ma ricordo che a un certo punto mi è stato detto definitivamente che non c'è modo di scrivere una formula di colonna personalizzata che memorizzi nella cache il suo valore tra le righe come fanno le formule interne.Quindi dovresti scrivere una funzione che valuta nel contesto di ogni riga, il che significa che restituisce un singolo valore alla volta.(Mi piacerebbe che qualcuno mi correggesse qui, se possibile.)
- JMP valuta il riferimento alla colonna prima di passarlo alla funzione (valutazione ansiosa), il che significa che ottieni il valore in quella riga invece che nell'intera colonna.Devi dire a JMP di passare un riferimento alla colonna e puoi farlo con Expr.
Credo che questo risolva entrambi i problemi, ma non sono sicuro che sia molto intuitivo o facile da usare.
Aggiornamento: la funzione personalizzata può accedere al contesto della riga, quindi puoi saltare la necessità di passare il valore per la riga corrente nella funzione, come nel Test2.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
my_min = New Custom Function(
"custom",
"Test1",
Function({x,y,yval},
show(yval);
show(Name Expr(x)<< get values);
show(Loc(Name Expr(y) << Get Values, yval));
Min((Name Expr(x)<< get values)[Loc(Name Expr(y) << Get Values, yval)]);
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
custom:Test1(Expr(:age),Expr(:sex),"F");
dt << New Column("Test1", Numeric, Continuous, Formula(custom:Test1(Expr(:height), Expr(:sex), :sex)));
my_min = New Custom Function(
"custom",
"Test2",
Function({x,y},
xvals = Name Expr(x)<< get values;
yvals = Name Expr(y) << Get Values;
Min(xvals[Loc(yvals, yvals[row()])]);
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);
dt << New Column("Test2", Numeric, Continuous, Formula(custom:Test2(Expr(:height), Expr(:sex))));Oggetto: creazione di una funzione statistica personalizzata (formula) con byVarBuon punto!Ero così concentrato sull'ottenere i riferimenti di colonna da valutare, non ho nemmeno notato che i valori erano privi di senso.ci penserò di più.
Oggetto: creazione di una funzione statistica personalizzata (formula) con byVarCiò non sembra fornire una risposta corretta in quanto molto probabilmente li sta valutando "riga per riga" e non come colonne

Oggetto: creazione di una funzione statistica personalizzata (formula) con byVarQuesto fa quello che vuoi?Sembra che tu debba valutare esplicitamente i parametri della funzione se ti aspetti che siano riferimenti di colonna.
my_min = New Custom Function(
"custom",
"My Min4",
Function({x, y},
EvalExpr(Col Minimum(Expr(x), Expr(y)));
),
<< Formula Category("Statistical")
);
Add Custom Functions(my_min);