Come faccio a creare una funzione di trasformazione personalizzata che accetta più colonne come input?La guida allo scripting è piuttosto utile per descrivere come creare nuove funzioni di trasformazione personalizzate, ma non è molto chiaro come gestire più colonne.
Come faccio a creare una funzione di trasformazione personalizzata che accetta più colonne come input? Ad esempio, se seleziono una colonna X, una Y e una Z e voglio prendere l'RSS (root-sum-squared) di queste tre colonne?
Inoltre, se l'ordine è importante, come viene impostato quell'ordine? È l'ordine in cui vengono selezionate le colonne?
Ri: Come posso creare una funzione di trasformazione personalizzata che accetta più colonne come input?funcDef = Function( { number }, { i, sum },
If( Is List( number ),
Sqrt( Summation( i = 1, N Items( number ), number[i]^2 ) ),
.
);
);
description = "This function returns the root sum squared of a list numbers.";
parmHint = "a list of numbers";
/* create function using variables
the commands can also be accepted as arguments in New Custom Function */
newAdd = New Custom Function( "mySpace", "RSS", funcDef );
newAdd << Description( description );
newAdd << Prototype( "mySpace:RSS( {} )" );
newAdd << Example( "mySpace:RSS( {1,2,3} )" );
// expr() Examples need to be passed inside NameExpr()
newAdd << Parameter( "List", parmHint );
newAdd << Formula Category( "MyNumberStuff" );
// add mySpace:RSS function to system
Add Custom Functions( newAdd );Ri: Come posso creare una funzione di trasformazione personalizzata che accetta più colonne come input?Scusa se sono così lento, non ho idea di come farlo.Ri: Come posso creare una funzione di trasformazione personalizzata che accetta più colonne come input?OK, quindi sostituisci lo spazio dei nomi Here con uno dei tuoi.
Ri: Come posso creare una funzione di trasformazione personalizzata che accetta più colonne come input?Ho copiato/incollato quella funzione in un nuovo script JSL e l'ho eseguito, ma il registro mostra questo errore: "Impossibile ridefinire uno spazio dei nomi JMP predefinito"Ri: Come posso creare una funzione di trasformazione personalizzata che accetta più colonne come input?Ecco una nuova funzione che prende una lista e restituisce lo stesso calcolo.
Names Default to Here( 1 );
// example
my numbers = List( 1, 2, 3, 4, 5 );
// define it
funcDef = Function( { number }, { i, sum },
If( Is List( number ),
Sqrt( Summation( i = 1, N Items( number ), number[i]^2 ) ),
.
);
);
// test it
Show( funcDef( my numbers ) );Ri: Come posso creare una funzione di trasformazione personalizzata che accetta più colonne come input?Cercherò i parametri dell'elenco, grazie.
Non ho idea di cosa stai parlando sulle virgolette doppie o sulla base del commento su JMP che fornisce funzioni e trasformazioni personalizzate.Ri: Come posso creare una funzione di trasformazione personalizzata che accetta più colonne come input?Evito qualsiasi cosa tra virgolette doppie. Di solito non hanno valore duraturo. JMP fornisce funzioni personalizzate e trasformazioni personalizzate. Perché non usarli come erano destinati?
Puoi sempre usare un parametro list invece di un parametro scalare se la tua funzione deve funzionare con un numero variabile di argomenti.
Ri: Come posso creare una funzione di trasformazione personalizzata che accetta più colonne come input?Grazie per la risposta, Marco! Un paio di domande di seguito rapide:
1. So che JMP *supporta* le funzioni di trasformazione multicolonna -- è solo che non supporta ancora le trasformazioni *personalizzate* multicolonna?
2. La tua funzione accetta 3 argomenti: è possibile definire una funzione che accetta un numero arbitrario di argomenti?Ri: Come posso creare una funzione di trasformazione personalizzata che accetta più colonne come input?Penso che una funzione personalizzata sia una scelta migliore per il tuo caso. La trasformazione personalizzata è limitata a un singolo input. La funzione personalizzata non è limitata in questo modo.
funcDef = Function( {x, y, z}, Sqrt( Sum( x^2, y^2, z^2 ) ) );
description = "This function returns the root sum squared of three numbers.";
// examples can be multiple statements inside expr()
ex2 = Expr(
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Here:RSS( :age[1], :age[2], :age[3] );
);
parmHint1 = "x value";
parmHint2 = "y value";
parmHint3 = "z value";
/* create function using variables
the commands can also be accepted as arguments in New Custom Function */
newAdd = New Custom Function( "Here", "RSS", funcDef );
newAdd << Description( description );
newAdd << Prototype( "Here:RSS(x,y,z)" );
newAdd << Example( "Here:RSS(1,2,3)" );
// expr() Examples need to be passed inside NameExpr()
newAdd << Example( Name Expr( ex2 ) );
newAdd << Parameter( "Number", parmHint1 );
newAdd << Parameter( "Number", parmHint2 );
newAdd << Parameter( "Number", parmHint3 );
newAdd << Formula Category( "NumberStuff" );
// add myNamespace:Add Ten function to system
Add Custom Functions( newAdd );
L'espressione all'interno della tua funzione potrebbe includere la logica per soddisfare qualsiasi esigenza di ordine corretto.