En muchos lenguajes de programación, se pueden indexar listas y matrices. Esto también es posible en Jmp:
list= {"A", "B", "C"};
mat=[1,2,3];
list[3]
mat[2]
A partir de Jmp 13, se hizo posible otro nivel de indexación: Subíndice de tabla de datos
Hoy en día, el usuario puede indexar fácilmente entradas en la tabla de datos con acceso de lectura y escritura.
Existe un tercer tipo de indexación: indexación del árbol de visualización.
Para un informe determinado, puede recorrer el árbol de visualización para identificar un objeto específico:
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)]
Quizás haya más lugares en Jmp donde la indexación ayude al usuario en su trabajo diario…
Para Expressions es mucho más complicado bajar del árbol:
Para obtener la variable Y :peso de
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 ) ) )
));
uno tiene que usar
Arg(Arg(Arg(Arg(Arg(myExpr,2),2),3),2),1) // :weight
muy frágil !!!!
Una solución alternativa: convierta la expresión de variables en una lista y use la indexación de listas:
myExpr=Expr(Variables( X( :height ), Y( :weight ), Overlay( :sex ) ))
Substitute(Name Expr(myExpr),Expr(Variables()),Expr(List()))["Y"];
pero hay varias desventajas:
- solo funciona para un solo nivel: jerarquía plana
- solo se encuentra el primer argumento con nombre, se ignoran los siguientes argumentos con nombre y el mismo identificador:
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)
- simplemente devuelve el primer argumento, los siguientes argumentos se pierden
myExpr = Expr(Distribution(columns(:height, :weight)));
Substitute(Name Expr(myExpr),Expr(Distribution()),Expr(List()))["columns"];
//returns :height -> :weight gets lost
¿Existe una posibilidad, análoga a la indexación del árbol de visualización, de escalar un árbol de expresión?
algo como:
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