很简单,我正在尝试模块化一些可变性图表。 总共有 3-4 个不同的参数,我想为这些图表绘制,所以我需要将一个键传递给函数以告诉它要绘制哪一列,并让它设置对该列的一些特定处理。 即,作为绘图操作的一部分,该列需要进行什么样的转换。
我开始的方法是传入一个字符串,然后使用一组条件来指定要转换的列的名称 (colname),然后是要应用于转换的字符串 (yname)。
我已经尝试了几种方法来做到这一点,无论我使用什么解决方案,我都无法让情节正常工作。 硬编码变异图表的 Y 始终适用于给定的过滤器,因此我知道存在数据,但我似乎无法使用我的变量方法选择它。 到目前为止,这是我对 var 图表 Y 线所做的尝试:
- Y( 转换列( yname, 公式( Column(colname) ) ) ),
- JMP 警报:参数无效(对话框)
- 组没有数据,因为所有行都有缺失值或被排除(日志窗口)
- Y( 转换列( yname, 公式( Column(dt,colname) ) ) ),
- JMP 警报:参数无效(对话框)
- 组没有数据,因为所有行都有缺失值或被排除(日志窗口)
- Y( 转换列( yname, 公式( Column( As Column(colname)) ) ) ),
- JMP 警报:未解析的列 256 次(对话框)
- “无效参数 256 次,一列或一组没有数据,因为所有行都有缺失值或被排除(日志)
- Y( 转换列( yname, 公式( Column( As Column(dt,colname)) ) ) ),
- JMP 警报:Scoped 数据表访问需要数据表列或变量 256 次(对话框)
- 参数无效 256 次,一列或一组没有数据,因为所有行都有缺失值或被排除(日志)
- Y(转换列(yname,公式(作为列(colname)))),
- JMP 警报:未解析的列 267 次(对话框)
- (没有日志错误)
- Y(转换列(yname,公式(作为列(dt,colname)))),
- JMP 警报:Scoped 数据表访问需要数据表列或变量 267 次(对话框)
- (没有日志错误)
如果我的尝试不是很明显,我仍然不清楚 As Column() 和 Column() 之间的区别是什么。 我在论坛上看到过任何一个和两个的解决方案,所以我尝试了所有这些,但一无所获。 我看到的唯一线索是,当 As Column() 被独立使用时,与它被 Column() 包装的情况 (256) 相比,我得到了不同数量的访问冲突 (267)。 我知道 267 是该过滤器返回的“正确”行数,因为在转换公式中对列名进行硬编码可以正确绘制 267 行。
此外,我尝试将 colname 变量直接设置为列(colname = :R 和 colname = ":R")以及直接使用它们和/或将它们包装在 Column() 和 As Column() 的组合中的各种组合功能也没有成功。
谁能看到我在这里做错了什么?
注意:此确切代码未经测试,var 名称已被通用化。
//
// Build plot functions
//
var_chart = Function( {dutname, ytype, stressname, bias, ver},
{chart, ax_min, ax_max, ax_step, len, colname, yname},
<BR /> ax_min = 0;<BR /> ax_max = 1;<BR /> ax_step = 0.1;<BR />
If(ytype == "r", (colname = "R"; yname = "R [Ω]"));<BR /> If(ytype == "l", (colname = "L"; yname = "L [H]"));<BR /> If(ytype == "c", (colname = "C"; yname = "C [F]"));
If(stressname == "s1", len = 1.1);
If(stressname == "s2", len = 2.2);
If(stressname == "s3", len = 3.3);
chart = Variability(
Y( Transform Column( yname, Formula( As Column(colname) ) ) ),
X( :X1, :X2, :X3, :X4 ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
<<SET scale=""></SET>