rendre les fonctions personnalisées utilisables dans les formulesSalut tout le monde,
Existe-t-il un moyen d'enregistrer un script contenant des fonctions pour les rendre utilisables dans les formules de colonnes ?
Par exemple, si j'écrivais un script avec une fonction hex2binary({str}) qui convertit un nombre hexadécimal en une chaîne de son équivalent binaire, et que je voulais pouvoir appeler cette fonction dans une formule similaire à l'une des formules intégrées Formule JSL, est-ce possible ?
Merci
Rayon
Re : Rendre les fonctions personnalisées utilisables dans les formules<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />On dirait que vous y êtes déjà. Mais, pour un autre exemple, vous pouvez procéder à l'ingénierie inverse du complément à l'adresse :
https://community.jmp.com/docs/DOC-7528
Re : Rendre les fonctions personnalisées utilisables dans les formulesSalut Ray3, Jeff, MS
Il y a quelque temps, mais je pense en fait avoir compris comment faire ça !
J'ai également essayé la méthode "include" décrite par MS, et elle fonctionne mais est incroyablement lente.
Cependant, j'ai également pu faire fonctionner la méthode du complément en créant le complément avec ma fonction, puis en l'appelant depuis l'éditeur de formule en
global:myfunc()
Plus précisément, j'ai créé cette fonction (elle est basée sur R et renvoie en fait simplement la racine carrée de l'argument, mais je suppose que cela n'a pas d'importance ici 
maRacine = Fonction({x},
RInit( );
R envoyer (x);
R Soumettre("
y <- sqrt(x)
");
a = R Obtenir (y);
R Terme( );
Retour(a);
);
Et puis je pourrais ajouter cette formule pour une nouvelle colonne :
global:maRacine(:Colonne 1)
Acclamations,
Esben
rendre les fonctions personnalisées utilisables dans les formulesBonjour Jeff, MS,
Merci pour les conseils.J'ai essayé les deux suggestions :
L'utilisation des fonctions Local(Include()) a fonctionné, mais a été assez lente pour mon ensemble de données (qui compte environ 20 000 lignes) car chaque fois qu'il calcule la formule, il ouvre le fichier inclus.
J'ai également essayé la suggestion de Jeff et ajouté la fonction au JMPStart.jsl.La fonction apparaît dans la liste des symboles globaux et je peux l'appeler sans problème à partir d'autres scripts au cours d'une session.Cependant, si j'appelle la fonction à partir d'une formule de colonne, j'obtiens une erreur « nom non résolu ».Dois-je faire quelque chose de spécial pour déterminer la portée afin que la formule de colonne reconnaisse la fonction ?
Merci!
Rayon
rendre les fonctions personnalisées utilisables dans les formulesSalut Ray,
Il n'existe aucun moyen de faire apparaître la fonction dans le navigateur de fonctions de l'éditeur de formule, mais les fonctions définies par l'utilisateur peuvent être utilisées dans les formules en double-cliquant sur un élément de formule et en tapant l'appel de fonction.
Pour garantir que vos fonctions sont définies dans chaque session JMP, vous disposez de plusieurs options.
1) Vous pouvez mettre votre déclaration de fonction dans le fichier JMPStart.JSL.
2) Vous pouvez créer un complément sans menus ni fonctionnalité au-delà de la déclaration de ces fonctions. Mettez simplement les déclarations de fonction dans le fichier addinload.jsl. Toute copie de JMP sur laquelle ce complément est installé disposera de ces fonctions disponibles.
J'espère que cela aide.
-Jeff
rendre les fonctions personnalisées utilisables dans les formulesJe ne connais pas de moyen d'enregistrer globalement des fonctions personnalisées qui fonctionnent dans les formules de colonnes. Cependant, il existe un moyen, peut-être pas très pratique, d'appeler une fonction localement à partir d'un fichier jsl enregistré.
Disons que vous avez enregistré un script avec uniquement cette fonction. Le fichier est nommé "plus_one" (ou autre).
un de plus = fonction ({ X } , X + 1 ) ;
Pour appeler cette fonction dans une formule de colonne, utilisez local() et include() comme ci-dessous :
Locale ( un de plus ,
Inclure ( "chemin/plus_one.jsl" ) ;
un de plus ( : Colonne ) ;
)
Où path est le chemin d'accès au fichier jsl enregistré et :Column est la colonne à laquelle vous appliquez la formule. Include() analyse et évalue le code jsl dans le fichier (cependant, le fichier n'est pas ouvert) et sans le contexte local, vous obtiendrez une erreur.
Ce n'est pas beau mais cela fonctionne et peut être utile si la fonction est très complexe et est souvent réutilisée.
En fait, je viens de penser qu'il devrait être possible de rassembler toutes mes formules personnalisées dans un seul fichier et d'utiliser un script de démarrage pour définir la variable de chemin. Ils seraient alors plus faciles à mettre en œuvre « globalement ». Et toute modification apportée aux fonctions stockées serait traduite dans toutes vos tables de données sans qu'il soit nécessaire de modifier chaque colonne ayant une fonction définie par l'utilisateur. Je n'ai pas testé cette idée, mais c'est une perspective intéressante. Peut-être une approche gourmande en RAM.