Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?Der Skriptleitfaden ist ziemlich nützlich, um zu beschreiben, wie man neue benutzerdefinierte Transformationsfunktionen erstellt, aber es ist nicht sehr klar, wie man mit mehreren Spalten umgeht.
Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet? Wenn ich zB eine X-, eine Y- und eine Z-Spalte auswähle und die RSS (Wurzel-Summe-Quadrat) dieser drei Spalten nehmen möchte?
Wenn die Reihenfolge wichtig ist, wie wird diese Reihenfolge festgelegt? Ist es die Reihenfolge, in der die Spalten ausgewählt werden?
Betreff: Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?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 );Betreff: Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?Entschuldigung, ich bin so langsam, ich habe keine Ahnung, wie das geht.Betreff: Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?OK, dann ersetzen Sie den Here-Namespace durch einen Ihrer eigenen.
Betreff: Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?Ich habe diese Funktion in ein neues JSL-Skript kopiert/eingefügt und ausgeführt, aber das Protokoll zeigt diesen Fehler: "Ein vordefinierter JMP-Namespace kann nicht neu definiert werden."Betreff: Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?Hier ist eine neue Funktion, die eine Liste nimmt und dieselbe Berechnung zurückgibt.
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 ) );Betreff: Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?Ich werde Listenparameter nachschlagen, thx.
Keine Ahnung, wovon Sie mit den doppelten Anführungszeichen sprechen, oder auf der Grundlage des Kommentars, dass JMP benutzerdefinierte Funktionen und Transformationen bereitstellt.Betreff: Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?Ich vermeide alles in doppelten Anführungszeichen. Sie haben in der Regel keinen bleibenden Wert. JMP bietet benutzerdefinierte Funktionen und benutzerdefinierte Transformationen. Warum sie nicht so verwenden, wie sie beabsichtigt waren?
Sie können immer einen Listenparameter anstelle eines Skalarparameters verwenden, wenn Ihre Funktion mit einer variablen Anzahl von Argumenten arbeiten muss.
Betreff: Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?Danke für die Antwort, Markus! Ein paar kurze Folgefragen:
1. Ich weiß, dass JMP mehrspaltige Transformationsfunktionen *unterstützt* – ist es nur so, dass es noch keine mehrspaltigen *benutzerdefinierten* Transformationen unterstützt?
2. Ihre Funktion benötigt 3 Argumente - ist es möglich, eine Funktion zu definieren, die eine beliebige Anzahl von Argumenten benötigt?Betreff: Wie erstelle ich eine benutzerdefinierte Transformationsfunktion, die mehrere Spalten als Eingaben verwendet?Ich denke, dass eine benutzerdefinierte Funktion für Ihren Fall die bessere Wahl ist. Die benutzerdefinierte Transformation ist auf eine einzelne Eingabe beschränkt. Die benutzerdefinierte Funktion ist auf diese Weise nicht eingeschränkt.
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 );
Der Ausdruck in Ihrer Funktion kann Logik enthalten, um alle Anforderungen an die richtige Reihenfolge zu erfüllen.