無法“評估”一個表達式大家好,
我又一次為腳本而苦苦掙扎......
這個構建了一個表達式。 看起來不錯。
我什至可以將它從日誌文件複製並粘貼回腳本窗口,如果這樣做,它會正確執行並產生預期的輸出。
但我嘗試了 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;