Machen Sie benutzerdefinierte Funktionen in Formeln nutzbarHallo zusammen,
Gibt es eine Möglichkeit, ein Skript mit Funktionen zu registrieren, um diese in Spaltenformeln nutzbar zu machen?
Wenn ich beispielsweise ein Skript mit einer Funktion hex2binary({str}) geschrieben habe, die eine Hexzahl in eine Zeichenfolge ihres binären Äquivalents umwandelt, und ich diese Funktion in einer Formel aufrufen möchte, die einer der integrierten Formeln ähnelt JSL-Formel, ist das möglich?
Danke
Strahl
Betreff: Benutzerdefinierte Funktionen in Formeln nutzbar machen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Sieht so aus, als wärst du schon da. Aber als weiteres Beispiel können Sie das Add-In unter folgender Adresse zurückentwickeln:
https://community.jmp.com/docs/DOC-7528
Betreff: Benutzerdefinierte Funktionen in Formeln nutzbar machenHallo Ray3, Jeff, MS
Vor einiger Zeit, aber ich glaube tatsächlich, ich habe herausgefunden, wie das geht!
Ich habe auch die von MS beschriebene „include“-Methode ausprobiert und sie funktioniert, ist aber unglaublich langsam.
Ich konnte die Add-in-Methode jedoch auch zum Laufen bringen, indem ich das Add-in mit meiner Funktion erstellte und es dann über den Formeleditor aufrief
global:myfunc()
Genauer gesagt habe ich diese Funktion erstellt (sie ist R-basiert und gibt eigentlich nur die Quadratwurzel des Arguments zurück, aber ich nehme an, dass sie hier keine Rolle spielt 
myRoot = Function({x},
R Init( );
R sende (x);
R Senden("
y <- sqrt(x)
");
a = R Holen Sie sich (y);
R Term( );
Return(a);
);
Und dann könnte ich diese Formel für eine neue Spalte hinzufügen:
global:myRoot(:Spalte 1)
Prost,
Esben
Machen Sie benutzerdefinierte Funktionen in Formeln nutzbarHallo Jeff, MS,
Danke für die Hinweise.Ich habe beide Vorschläge ausprobiert:
Die Verwendung der Local(Include())-Funktionen hat funktioniert, war aber für meinen Datensatz (der etwa 20.000 Zeilen lang ist) ziemlich langsam, da bei jeder Berechnung der Formel die eingebundene Datei geöffnet wird.
Ich habe auch Jeffs Vorschlag ausprobiert und die Funktion zu JMPStart.jsl hinzugefügt.Die Funktion wird in der globalen Symbolliste angezeigt und ich kann sie problemlos in einer Sitzung aus anderen Skripten aufrufen.Wenn ich die Funktion jedoch aus einer Spaltenformel aufrufe, erhalte ich die Fehlermeldung „Name nicht aufgelöst“.Muss ich beim Scoping etwas Besonderes tun, damit die Spaltenformel die Funktion erkennt?
Danke!
Strahl
Machen Sie benutzerdefinierte Funktionen in Formeln nutzbarHallo Ray,
Es gibt keine Möglichkeit, die Funktion im Funktionsbrowser des Formeleditors anzuzeigen, aber benutzerdefinierte Funktionen können in Formeln verwendet werden, indem Sie auf ein Formelelement doppelklicken und den Funktionsaufruf eingeben.
Um sicherzustellen, dass Ihre Funktionen in jeder JMP-Sitzung definiert werden, stehen Ihnen mehrere Optionen zur Verfügung.
1) Sie können Ihre Funktionsdeklaration in die Datei JMPStart.JSL einfügen.
2) Sie können ein Add-In erstellen, das keine Menüs und keine Funktionalität außer der Deklaration dieser Funktionen hat. Fügen Sie einfach die Funktionsdeklarationen in die Datei addinload.jsl ein. Jede Kopie von JMP, auf der dieses Add-In installiert ist, verfügt über diese Funktionen.
Ich hoffe das hilft.
-Jeff
Machen Sie benutzerdefinierte Funktionen in Formeln nutzbarMir ist keine Möglichkeit bekannt, benutzerdefinierte Funktionen global zu registrieren, die in Spaltenformeln funktioniert. Es gibt jedoch eine möglicherweise nicht sehr praktische Möglichkeit, eine Funktion lokal aus einer gespeicherten JSL-Datei aufzurufen.
Nehmen wir an, Sie haben ein Skript nur mit dieser Funktion gespeichert. Die Datei heißt „plus_one“ (oder wie auch immer).
Plus eins = Funktion ({ X } , X + 1 ) ;
Um diese Funktion innerhalb einer Spaltenformel aufzurufen, verwenden Sie local() und include() wie folgt:
Lokal ( Plus eins ,
Enthalten ( „path/plus_one.jsl“ ) ;
Plus eins ( : Spalte ) ;
)
Dabei ist path der Pfad zur gespeicherten JSL-Datei und :Column die Spalte, auf die Sie die Formel anwenden. Include() analysiert und wertet den JSL-Code in der Datei aus (die Datei wird jedoch nicht geöffnet) und ohne den lokalen Kontext erhalten Sie eine Fehlermeldung.
Es ist nicht schön, aber es funktioniert und kann nützlich sein, wenn die Funktion sehr komplex ist und oft wiederverwendet wird.
Eigentlich kam mir gerade der Gedanke, dass es möglich sein sollte, alle meine benutzerdefinierten Formeln in einer einzigen Datei zu sammeln und ein Startskript zum Festlegen der Pfadvariablen zu verwenden. Dann wären sie leichter „global“ umsetzbar. Und alle Änderungen an den gespeicherten Funktionen werden auf alle Ihre Datentabellen übertragen, ohne dass jede Spalte mit einer benutzerdefinierten Funktion bearbeitet werden muss. Ich habe diese Idee nicht getestet, aber es ist eine faszinierende Perspektive. Möglicherweise handelt es sich jedoch um einen RAM-hungrigen Ansatz.