Dans de nombreux langages de programmation, on peut indexer des listes et des matrices. C'est également possible dans Jmp :
list= {"A", "B", "C"};
mat=[1,2,3];
list[3]
mat[2]
A partir de Jmp 13, un autre niveau d'indexation est devenu possible : Inscription aux tables de données
De nos jours, l'utilisateur peut facilement indexer les entrées de la table de données avec un accès en lecture et en écriture.
Il existe un troisième type d'indexation : l'indexation de l'arborescence d'affichage.
Pour un rapport donné, vous pouvez parcourir l'arborescence d'affichage pour identifier un objet spécifique :
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
)
Report(gb)["Graph Builder"][AxisBox(1)]
Peut-être y a-t-il plus d'endroits dans Jmp où l'indexation aide l'utilisateur dans son travail quotidien...
Pour les expressions, il est beaucoup plus compliqué de parcourir l'arborescence :
Pour obtenir la variable Y :poids depuis
myExpr=Expr(gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
));
il faut utiliser
Arg(Arg(Arg(Arg(Arg(myExpr,2),2),3),2),1) // :weight
très fragile !!!!
Une solution de contournement : convertissez l'expression de variables en liste et utilisez l'indexation de liste :
myExpr=Expr(Variables( X( :height ), Y( :weight ), Overlay( :sex ) ))
Substitute(Name Expr(myExpr),Expr(Variables()),Expr(List()))["Y"];
mais il y a plusieurs inconvénients :
- ne fonctionne que pour un seul niveau - hiérarchie plate
- seul le premier argument nommé est trouvé, les autres arguments nommés avec le même identifiant sont ignorés :
myExpr=Expr(Variables( X( :height ), Y( :weight ),Y(:height ), Overlay( :sex ) ));
Substitute(Name Expr(myExpr),Expr(Variables()),Expr(List()))["Y"]; // returns :weight, ignores Y(:height)
- renvoie simplement le premier argument, les autres arguments sont perdus
myExpr = Expr(Distribution(columns(:height, :weight)));
Substitute(Name Expr(myExpr),Expr(Distribution()),Expr(List()))["columns"];
//returns :height -> :weight gets lost
Existe-t-il une possibilité, analogue à l'indexation de l'arbre d'affichage, de grimper dans un arbre d'expression ?
quelque chose comme:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
myExpr=Expr(gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Y(:height), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
));
//instead of:
Arg(Arg(Arg(Arg(Arg(myExpr,2),2),3),3),1)
<BR />// I want to use:
myExpr[2][2["Variables"]["Y"(2)][1]
//assign // send // Graph Builder // Variables