In molti linguaggi di programmazione è possibile indicizzare liste e matrici. Questo è possibile anche in Jmp:
list= {"A", "B", "C"};
mat=[1,2,3];
list[3]
mat[2]
Dal Jmp 13 è diventato possibile un altro livello di indicizzazione: Sottoscrizione della tabella dati
Al giorno d'oggi l'utente può facilmente indicizzare le voci nella tabella dati con accesso in lettura e scrittura.
Esiste un terzo tipo di indicizzazione: l'indicizzazione dell'albero di visualizzazione
Per un determinato report, è possibile percorrere la struttura di visualizzazione per identificare un oggetto specifico:
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)]
Forse ci sono più posti in Jmp in cui l'indicizzazione aiuta l'utente nel suo lavoro quotidiano...
Per le espressioni è molto più complicato scendere dall'albero:
Per ottenere la variabile Y :peso da
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 ) ) )
));
bisogna usare
Arg(Arg(Arg(Arg(Arg(myExpr,2),2),3),2),1) // :weight
molto fragile!!!!
Una soluzione alternativa: convertire l'espressione delle variabili in un elenco e utilizzare l'indicizzazione dell'elenco:
myExpr=Expr(Variables( X( :height ), Y( :weight ), Overlay( :sex ) ))
Substitute(Name Expr(myExpr),Expr(Variables()),Expr(List()))["Y"];
ma ci sono diversi svantaggi:
- funziona solo per un singolo livello: gerarchia piatta
- viene trovato solo il primo argomento con nome, gli ulteriori argomenti con nome con lo stesso identificatore vengono ignorati:
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)
- restituisce solo il primo argomento, gli ulteriori argomenti vengono persi
myExpr = Expr(Distribution(columns(:height, :weight)));
Substitute(Name Expr(myExpr),Expr(Distribution()),Expr(List()))["columns"];
//returns :height -> :weight gets lost
Esiste la possibilità, analogamente all'indicizzazione dell'albero di visualizzazione, di scalare un albero delle espressioni?
qualcosa di simile a:
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