尋找並提取具有給定表達式頭的表達式參數我想編寫一個高效的腳本,將 JSL 表達式作為輸入並:
- 在該表達式中尋找具有特定表達式頭的參數
- 用該論點的修改版本來取代該論點
例子:
我有這種表情
my_expr=Expr(<BR />Fit Model(
Y( :y ),
Effects( :Drug, :x ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:y << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Scaled Estimates( 0 ),
Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ),
Plot Studentized Residuals( 0 ), Plot Effect Leverage( 1 ),
Plot Residual by Normal Quantiles( 0 ), Box Cox Y Transformation( 0 ),
{:Drug << {LSMeans Contrast( [1 0 -1] )}}}
)
)<BR />);我想找到隱藏在表達式中的“LSMeans Contrast(...)”參數,並將該表達式提取到一個新的表達式中,我們稱之為擷取的_表達式 。
所以在這種情況下我想要
extracted_expression = Expr(LS Means Contrast([1 0 -1]))
然後,我想要取得該表達式的參數,修改它,然後修改extracted_expression,並用修改後的參數表達式取代原始擷取的表達式。 。例如:
new_expression=Substitute(Name Expr(extracted_expression), arg(extracted_expression,1), [-1 0 .5]);
Substitute(Name Expr(my_expr), Name Expr(extracted_expression), Name Expr(new_expression));
得到的表達式為
Fit Model(
Y( :y ),
Effects( :Drug, :x ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:y << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Scaled Estimates( 0 ),
Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ),
Plot Studentized Residuals( 0 ), Plot Effect Leverage( 1 ),
Plot Residual by Normal Quantiles( 0 ), Box Cox Y Transformation( 0 ),
{:Drug << {LS Means Contrast( [-1 0 0.5] )}}}
)
)
我遇到困難的地方是第 1 步,如何遍歷原始表達式的參數以找到具有指定標題的表達式的參數(在此範例中,參數的頭部是LS 均值對比 )。
關於如何做到這一點有什麼建議/想法嗎?
自動化和腳本回覆:尋找並提取具有給定表達式頭的表達式參數請注意,這不是我正在處理的真正問題,上面提供的表達式只是一個在表達式深處埋藏表達式參數的範例。
回覆:尋找並提取具有給定表達式頭的表達式參數提取 Expr()創造了奇蹟:)

回覆:尋找並提取具有給定表達式頭的表達式參數提取 Expr 也許就是您正在尋找的東西?
Names Default To Here(1);
my_expr=Expr(Fit Model(
Y( :y ),
Effects( :Drug, :x ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:y << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Scaled Estimates( 0 ),
Plot Actual by Predicted( 1 ), Plot Residual by Predicted( 1 ),
Plot Studentized Residuals( 0 ), Plot Effect Leverage( 1 ),
Plot Residual by Normal Quantiles( 0 ), Box Cox Y Transformation( 0 ),
{:Drug << {LSMeans Contrast( [1 0 -1] )}}}
)
));
myhead = Extract Expr(my_expr, LSMeans Contrast(Wild()));
myarg = Arg(part, 1);
//show(myhead, myarg);
new_expr = Substitute(Name Expr(myhead), myarg, [1 0 1]);
my_expr2 = Substitute(Name Expr(my_expr), Name Expr(myhead), Name Expr(new_expr));
Show(my_expr, my_expr2);
回覆:尋找並提取具有給定表達式頭的表達式參數以下是extract expr() 的一些細節/缺陷:
擷取表達式
回覆:尋找並提取具有給定表達式頭的表達式參數重要提示:
提取 expr()不是貪婪的,它會在找到第一個匹配後停止。
另一方面, 代替()是貪婪的。
@jthi的程式碼中的兩步驟替換至關重要!
my_expr=Expr(Fit Model(
{:Drug << {LSMeans Contrast( [1 0 -1] )}}
);
[1 0 -1] // another time the same Arg, lives in danger
);
part= Extract Expr(my_expr, LSMeans Contrast(Wild()));
myarg = Arg(part, 1); //part instead of myhead
new_expr = Substitute(Name Expr(myhead), myarg, [1 0 1]);
my_expr2 = Substitute(Name Expr(my_expr), Name Expr(myhead), Name Expr(new_expr));<BR /><BR />// won't work<BR />// my_expr3 = Substitute(Name Expr(my_expr), Name Expr(myarg), [1 0 1]);這裡的問題很明顯——但在其他情況下,控制哪個表達式被替換就更加困難了。
相關願望:
替換第一次出現
:folded_hands: 表達式索引:讀寫訪問
subst() - substitute() 2.0
回覆:尋找並提取具有給定表達式頭的表達式參數感謝@jthi和@hogi 。我不熟悉 Extract Expr() 和 Wild() 表達式。對於我實際正在做的工作來說,效果很好。非常感謝。