Creazione di una funzione statistica personalizzata (formula) con byVarRelativo a questo elemento della lista dei desideri che ho creato: Aggiungere normalizzazione e funzioni statistiche robuste (e funzioni di matrice) . Ho pensato che per ora avrei potuto semplicemente provare a scriverle come funzioni personalizzate (anche se so che sarebbe stato impossibile condividerle e aggiornarle per tutti), ma ho dovuto affrontare 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 facendo riferimento a colonne come stringhe anziché :colname, il che mi impedirebbe di utilizzarli direttamente dall'editor delle 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)));Combinazione e pulizia dei datiEsplorazione e visualizzazione dei datiPersonalizzazione di massaRi: Creazione di una funzione statistica personalizzata (formula) con byVarVoce della lista dei desideri che credo renderebbe tutto molto più semplice:
Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righe
Ri: 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.Pertanto dovresti scrivere una funzione che valuti 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 desiderosa), il che significa che ottieni il valore in quella riga anziché nell'intera colonna.Devi dire a JMP di passare un riferimento alla colonna e puoi farlo con Espr.
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))));Ri: Creazione di una funzione statistica personalizzata (formula) con byVarBuon punto!Ero così concentrato nel ottenere i riferimenti alle colonne da valutare che non ho nemmeno notato che i valori erano privi di senso.Ci penserò di più.
Ri: Creazione di una funzione statistica personalizzata (formula) con byVarCiò non sembra fornire una risposta corretta poiché molto probabilmente li valuta "riga per riga" e non come colonne

Ri: Creazione di una funzione statistica personalizzata (formula) con byVarQuesto fa quello che vuoi?Sembra che tu debba valutare esplicitamente i parametri della funzione se prevedi che siano riferimenti a colonne.
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);