无法“评估”一个表达式大家好,
我又一次为脚本而苦苦挣扎......
这个构建了一个表达式。 看起来不错。
我什至可以将它从日志文件复制并粘贴回脚本窗口,如果这样做,它会正确执行并产生预期的输出。
但我尝试了 Eval()、Eval Expr()、Eval(Eval Expr())、Eval(Parse())... 好吧,最后一个比其他的希望更小,但底线是... 我就是无法让它工作!
Names Default To Here( 1 );
ParamsList = {
{"P1", "Parameter 1"},
{"P2", "Parameter 2"}
};
analysis = Expr(Analysis Column());
For (i=1, i<= Length(ParamsList), i++,
Insert Into(
analysis,
Substitute(
Expr(Transform Column("__Desc__", Formula(__Parameter__))),
"__Desc__", ParamsList[i][2]||" Median",
Expr(__Parameter__), Parse(":"||ParamsList[i][1]||"_Q50")
)
);
);
addRowExpr = Expr(Row Table());
Insert Into(addRowExpr, Eval Expr(analysis));
Insert Into(addRowExpr, Expr(Statistics(Median)));
addTabExpr = Expr(Add Table(Column Table(Grouping Columns(:Source))));
Insert Into(addTabExpr, Eval Expr(addRowExpr));
tabExpr = Expr(Tabulate(Set Format(Uniform Format(10,2))));
Insert Into(tabExpr, Eval Expr(addTabExpr));
show(tabExpr);
dtParams = Eval(Eval Expr(tabExpr));我附上了一个“Test.jmp”文件,您可以在上面尝试。
“显示”命令的输出是:
tabExpr = Tabulate(Set Format(Uniform Format(10, 2)), Add Table(Column Table(Grouping Columns(:Source)), Row Table(Analysis Column(Transform Column("Parameter 1 Median", Formula(:P1_Q50)), Transform Column("Parameter 2 Median", Formula(:P2_Q50))), Statistics(Median))));如前所述:如果我将其复制粘贴回脚本窗口以执行该输出,我得到了我想要的!
那么,我如何“评估”那个表达呢?
谢谢!
回复:无法“评估”一个表达式嗨,吉姆,
您的解决方案确实有效! 非常感谢。
我正在联系支持人员。回复:无法“评估”一个表达式使用我的“晨脑”我想出了:
eval(parse(char(evalexpr(tabexpr))))
这将允许已构建的表达式执行。
我同意 Ian 的观点,代码应该按照开发的方式工作,我建议您将问题发布到:
支持@jmp.com
回复:无法“评估”一个表达式这确实很奇怪,除了将代码放在一个地方之外,我没有添加太多内容。 我怀疑这与虚拟列的使用有关,但需要更多调查。
Names Default To Here( 1 );
ClearLog();
dt = New Table( "Test",
Add Rows( 5 ),
New Column( "P1_Q50",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [32.6, 54.8, 48.9, 28, 51.4] )
),
New Column( "P2_Q50",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [9, 7, 8, 6, 12] )
),
New Column( "Source",
Character( 1 ),
"Nominal",
Set Values( {"A", "B", "B", "A", "B"} )
)
);
ParamsList = {
{"P1", "Parameter 1"},
{"P2", "Parameter 2"}
};
analysis = Expr(Analysis Column());
For (i=1, i<= Length(ParamsList), i++,
Insert Into(
analysis,
Substitute(
Expr(Transform Column("__Desc__", Formula(__Parameter__))),
"__Desc__", ParamsList[i][2]||" Median",
Expr(__Parameter__), Parse(":"||ParamsList[i][1]||"_Q50")
)
);
);
addRowExpr = Expr(Row Table());
Insert Into(addRowExpr, Eval Expr(analysis));
Insert Into(addRowExpr, Expr(Statistics(Median)));
addTabExpr = Expr(Add Table(Column Table(Grouping Columns(:Source))));
Insert Into(addTabExpr, Eval Expr(addRowExpr));
tabExpr = Expr(Tabulate(Set Format(Uniform Format(10,2))));
Insert Into(tabExpr, Eval Expr(addTabExpr));
show(tabExpr);
NewWindow("tabExpr", tabExpr);
NewWindow("Eval(Parse(Char(NameExpr(tabExpr))))", Eval(Parse(Char(NameExpr(tabExpr)))));回复:无法“评估”一个表达式代码在开放代码中似乎不能完全执行,这当然很奇怪。 我能够做到的唯一方法是将您的表达式 tabExpr 转换为文字字符串,并使用 Eval(Parse().
eval(parse("Tabulate(
Set Format( Uniform Format( 10, 2 ) ),
Add Table(
Column Table( Grouping Columns( :Source ) ),
Row Table(
Analysis Column(
Transform Column(\!"Parameter 1 Median\!", Ordinal, Formula( :P1_Q50 ) ),
Transform Column(\!"Parameter 2 Median\!", Ordinal, Formula( :P2_Q50 ) )
),
Statistics( Median )
)
)
);"))
也许其他社区成员之一有一个想法
回复:无法“评估”一个表达式啊!
我了解您遇到的问题,我在保存更改之前上传了 Test.jmp。
这是正确的版本。
预期输出(通过在日志中复制 show() 的结果)

我使用这样的脚本的原因是:
- 实际应用中的参数列表要长得多
-参数会根据我的输入数据而改变,但它们总是被记录下来。
回复:无法“评估”一个表达式您的预期输出是什么? 我看到很多东西被生成并放入列表中,但我没有看到对这些东西做任何事情。
回复:无法“评估”一个表达式嗨,贾斯汀,
它在这里不起作用。 如果有帮助,我正在使用 JMP 12.1。
它所做的是创建一个表格,但不填充内容。 我得到 A 列和 B 列。
我有一行和 A 和 B 的计数。回复:无法“评估”一个表达式只需运行“tabExpr”即可计算表达式。
tabulateObject = tabExpr;