在许多编程语言中,可以对列表和矩阵进行索引。 这在 Jmp 中也是可能的:
list= {"A", "B", "C"};
mat=[1,2,3];
list[3]
mat[2]
从 Jmp 13 开始,另一个级别的索引成为可能:数据表下标
如今,用户可以轻松地通过读写访问来索引数据表中的条目。
还有第三种索引:显示树索引
对于给定的报告,您可以沿着显示树向下查找以识别特定对象:
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)]
也许 Jmp 中有更多地方索引可以帮助用户进行日常工作......
对于表达式来说,沿着树走下去要复杂得多:
获取 Y 变量:重量从
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 ) ) )
));
一个人必须使用
Arg(Arg(Arg(Arg(Arg(myExpr,2),2),3),2),1) // :weight
非常脆弱!!!!
解决方法:将变量表达式转换为列表并使用列表索引:
myExpr=Expr(Variables( X( :height ), Y( :weight ), Overlay( :sex ) ))
Substitute(Name Expr(myExpr),Expr(Variables()),Expr(List()))["Y"];
但也有几个缺点:
- 仅适用于单一级别 - 扁平层次结构
- 仅找到第一个命名参数,具有相同标识符的其他命名参数将被忽略:
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)
- 只返回第一个参数,其他参数会丢失
myExpr = Expr(Distribution(columns(:height, :weight)));
Substitute(Name Expr(myExpr),Expr(Distribution()),Expr(List()))["columns"];
//returns :height -> :weight gets lost
是否有可能类似于显示树索引来攀爬表达式树?
就像是:
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