JSL - 为什么我第一次运行脚本时出错,但第二次运行?
第一次运行下面显示的脚本会返回此错误“Name Unresolved: m{36803} in access or evaluation of 'm', m/*###*/”,而每次后续运行都不会返回该错误。为什么是这样?
DataCV=open("C:\Desktop\JMP\sample_CV_data.csv");
Summarize( DataCV, processArray = By( :process ) );
Summarize( DataCV, ctypeArray = By( :c_type ) );
For( n = 1, n <= Length( ctypeArray ), n++, // Generates and saves all splines by :c_type and :process
For( m = 1, m <= Length( processArray ), m++,
Eval(
Substitute(
Expr(
biv = Bivariate(
Y( :c_mm_deembed_pf ),
X( :v_dut_volt ),
Where( :c_type == __ctype__ & :process == __process__ ),
Fit Spline( 0.1, standardized, {save predicteds} )
)
),
Expr( __process__ ), processArray[m],
Expr( __ctype__ ), ctypeArray[n],
)
)
);
);
(Data Table( DataCV ) << Tabulate( // Create new table
Add Table(
Column Table( Analysis Columns( :Spline Predictor for c_mm_deembed_pf Where ) ),
Row Table( Grouping Columns(:serial_num, :process, :c_type, :v_dut_volt ) )
)
)) << Make Into Data Table;
currentDataTable()<<ADDROWS></ADDROWS>
回复:JSL - 为什么我第一次运行脚本时出错,但第二次运行?你试过扔一个
Names default to here(1);
在脚本的开头。
您的变量 m 可能是由另一个脚本定义的,它可能会在这里干扰,直到它第一次被该脚本覆盖。
回复:JSL - 为什么我第一次运行脚本时出错,但第二次运行?@adjo9835你找到问题了吗? 我也使用变量收到此错误,仅在第一次运行时而不是第二次运行。 我正在使用 JMP 15
回复:JSL - 为什么我第一次运行脚本时出错,但第二次运行?谢谢! 考虑到这是我第一次使用 JMP 并且文件转换不是典型的 JMP 应用程序,我对此感觉非常好。
我仍然遇到同样的错误,只是在第一次运行脚本时,如下所示。
该脚本甚至会在抛出错误之前从 :c_type x :process Where 子句组合之一生成并保存一条样条线到一个新列中。暗示它经历了如下所示的 for 循环的完整迭代:
For( n = 1, n <= Length( ctypeArray ), n++,
创建并保存到新列中的 1 个样条曲线如下所示:
我将尝试更新到 JMP 14,看看是否能解决问题。我一直在使用 JMP 13.0.0
回复:JSL - 为什么我第一次运行脚本时出错,但第二次运行?很酷的剧本!
试试这个版本
DataCV = Open( "$sample_data/big class.jmp" );
Summarize( DataCV, processArray = By( :age ) );
Summarize( DataCV, ctypeArray = By( :sex ) );
For( n = 1, n <= Length( ctypeArray ), n++,
Show( n, ctypeArray[n] );
For( m = 1, m <= Length( processArray ), m++,
Show( m, processArray[m] );
temp = Substitute(
Expr(
biv = Bivariate(
Y( :height ),
X( :weight ),
Where( :sex == __ctype__ & :age == Num( __process__ ) ),
Fit Spline( 0.1, standardized, {save predicteds} )
)
),
Expr( __process__ ), processArray[m],
Expr( __ctype__ ), ctypeArray[n],
);
Show( Name Expr( temp ) );
Eval( temp );
);
);
除了更改示例脚本并添加 NUM() 包装器并打印中间表达式之外,我认为我没有更改任何内容。 在 JMP 14 中,我没有看到您描述的错误。
看起来数字年龄列的摘要列出了字符串而不是数字,因此 num 将其转换回来。 我认为这不是您描述的原始问题的一部分。
@EvanMcCorkle
回复:JSL - 为什么我第一次运行脚本时出错,但第二次运行?添加:
show(m,processArray[m]);
脚本结果在日志中显示:
m = 1;
processArray[m] = "DVT0002B";
因此,错误必须在 Eval() 内部?
数据表没有名为“m”的列。
回复:JSL - 为什么我第一次运行脚本时出错,但第二次运行?尝试这样的事情开始。 是那个 Eval 的错误吗? 该表是否有名为“m”的列?
For( m = 1, m <= Length( processArray ), m++,
show(m,processArray[m]); // <<<<<<
Eval( ...
您可以进一步隔离中间变量发生的情况,以保存(并打印 nameexpr)替代结果。