Problème de changement de colonne de script utilisant des variables<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour, j'ai un problème avec le script du sélecteur de colonnes à partir des variables de colonne obtenues à partir des boîtes d'affichage de l'interface graphique.Mon exemple ici concerne le générateur de graphiques, mais j'ai essayé une autre plateforme avec des résultats similaires. Je ne sais pas si c'est à cause de la façon dont j'obtiens les noms de colonnes (obj << get items()), j'ai donc inclus tout cela dans le jsl ci-joint.Ce qui devrait arriver, c'est que le générateur de graphiques devrait se charger sans erreur, la colonne "Y" devrait être dans le rôle Y, puis "Y" plus mes deux colonnes factices ajoutées "temp" et "temp2" devraient être dans le sélecteur de colonnes. Mais dans le premier argument de Column Switcher(), il semble que ce soit uniquement comme si vous y aviez tapé du texte. Si je tape le texte "Y" ou ":Y", cela fonctionne bien, mais je n'ai pas trouvé de moyen de masser ma variable de colonne contenant "Y" de manière à ce qu'elle fonctionne. Lorsque j'utilise la variable, une erreur est générée.
Voici un extrait du code, et j'ai joint un script simplifié qui ouvrira des exemples de données, générera une interface graphique auto-remplie (cliquez simplement sur OK), et vous pourrez voir comment la simple saisie des noms de colonnes fonctionnera, mais mes nombreux les tentatives avec des variables ne le seront pas. Est-ce que je fais quelque chose de mal ou est-ce un bug ? Si oui, existe-t-il une solution de contournement ? J'utilise JMP 11.2.0.
Notez que cet extrait est affiché à titre de référence uniquement. Si vous souhaitez l'exécuter, exécutez l'intégralité du fichier joint. yParamNames est une liste contenant les paramètres à tracer."Y" est la première colonne de cette liste.
Générateur de graphiques (
Taille (570, 559),
Variables( X( colonne(dtDataOrig,tempName[1]) ), Y( colonne(dtDataOrig,yParamNames[1]) ), Overlay( colonne(dtDataOrig, partIdName[1]) ) ),
Éléments(
Ligne (X, Y, Légende ( 13 ), Ordre des lignes ( 0 ), Statistique récapitulative ( "Moyenne" ) )
),
Sélecteur de colonnes (
//"Y", // taper le texte du nom de la colonne fonctionne
// ne marche pas
//en tant que colonne (dtDataOrig, Y),
//en tant que colonne(:Y),
//en tant que colonne (Y),
//colonne(Y),
//colonne(:Y),
yParamNames[1], // <---- Je pense que cela fonctionnerait et serait l'implémentation la plus simple, mais je n'arrive pas à lui faire accepter une variable.
yParamNames
)
);
Merci,
Mike
Re : Problème de changement de colonne de script utilisant des variablesLe problème signalé ici date de quelques années, mais j'aimerais confirmer que Column Switcher évalue désormais ses arguments comme il se doit, afin que les clients ne devraient plus avoir à contourner ce problème. Cela devrait fonctionner correctement dans JMP 13 et les versions ultérieures.
Re : Problème de changement de colonne de script utilisant des variablesMerci David, cela fonctionne parfaitement.Je me demandais si je devais essayer la technique Eval(Parse(Eval Insert())), mais je n'aurais pas pensé à l'utiliser après avoir d'abord créé l'objet générateur de graphique.
Merci également à PMroz pour votre contribution également... Ce script était en quelque sorte votre idée.Lors du dernier Discover Summit, j'avais demandé à afficher les données de caractérisation de la température sous forme de nuage de points, en remplacement de mes scripts Excel, et vous aviez suggéré un générateur de graphiques avec un sélecteur de colonnes. Fonctionne à merveille. Merci!
-Mike
Re : Problème de changement de colonne de script utilisant des variablesEssayez de retirer le sélecteur de colonnes de la fonction Graph Builder et de le créer à l'aide d'un message :
gb = Générateur de graphiques (
Taille(...),
Variables( ... ),
Éléments( ... )
);
Évaluer ( Analyser ( Insertion d'évaluation ( "\[
gb << Sélecteur de colonnes ( ^yParamNames[1]^, ^yParamNames^ )
]\" ))) ;
La syntaxe du dernier morceau n’est pas facile à expliquer en détail mais elle est facile à utiliser.Il utilise le même principe que celui décrit par Peter, mais avec une syntaxe qui ne nécessite pas de séquences d'échappement pour construire la chaîne.
Cela aide à comprendre la séquence que vous utilisez pour créer ce dernier morceau de code.Vous commencez avec ce modèle :
Évaluer ( Analyser ( Insertion d'évaluation ( "\[
]\" ))) ;
vous écrivez (ou copiez) votre code JSL à l'intérieur de ce modèle :
gb << Sélecteur de colonnes ( yParamNames[1], yParamNames )
Pour indiquer qu'il existe des variables qui doivent être évaluées dynamiquement, utilisez un symbole « caret » : ^variable^
Re : Problème de changement de colonne de script utilisant des variablesEst-ce ce que vous aviez en tête ? J'ai essayé ceci et il se comporte toujours de la même manière.
str = " Constructeur de graphiques (
Taille (570, 559),
Variables( X( colonne(dtDataOrig,tempName[1]) ), Y( colonne(dtDataOrig,yParamNames[1]) ), Overlay( colonne(dtDataOrig, partIdName[1]) ) ),
Éléments(
Ligne (X, Y, Légende ( 13 ), Ordre des lignes ( 0 ), Statistique récapitulative ( \!"Moyenne\!" ) )
),
Sélecteur de colonnes (
//yParamNames[1],
:Oui,
yParamNames
)
);" ;
évaluer ( analyser ( str )) ;
Re : Problème de changement de colonne de script utilisant des variablesParfois, les variables ne fonctionnent pas directement en JSL.Créez le code du générateur de graphiques de manière dynamique sous la forme d'une chaîne dont vous savez qu'elle fonctionnera et exécutez-le avec eval(parse()).
dt = ouvrir ( "$sample_data\big class.jmp" ) ;
str = " Constructeur de graphiques (
Afficher le panneau de configuration (0),
Variables( X( :poids ), Y( :hauteur ) ),
Éléments(
Points( X, Y, Légende( 1 ), Jitter( 1 ) ),
Ligne d'ajustement (
X,
Oui,
Légende( 4 ),
Confiance d'ajustement( 1 ),
Confiance de prédiction ( 0 ),
Degré( \!"Linéaire\!" ),
Équation( 0 ),
Erreur quadratique moyenne (0),
R²( 0 )
)
)
)" ;
évaluer ( analyser ( str )) ;