使用“*”符號解析字符串,而不創建其他空格你好,
我正在以編程方式迭代幾個數組來創建一個字符串變量,可以對其進行解析和評估,以便自動將模型擬合到數據中。
我遇到的問題是列標題名為“DL * 15”。
因此,當我嘗試解析並評估“:DL * 15”時,我收到錯誤,因為解析創建:DL * 15。附加空格使評估無效,因為該列的名稱為:DL * 15而不是:DL * 15。
正在發生的事情的一個例子如下所示:

解析“DL * 15”時有沒有辦法防止出現間距?
謝謝,
內特
Re:使用“*”符號解析字符串,而不創建附加空格名稱包裝器圍繞整個名稱,而不僅僅是使名稱看起來像表達式的字符。
要么...
還有其他方法可以構建這樣的表達式,使用表達式處理函數直接操作表達式,而不是使用字符串並將字符串解析為表達式。 如果您的表格中有一個名為“ 罪(一)* COS(B) “你可以做到這一點
ex = expr(
Fit Model(
Y( YVARIABLEPLACEHOLDER ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:weight << {Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Effect Leverage( 1 )}
)
)
);
substituteInto( ex, expr(YVARIABLEPLACEHOLDER), asName("sin(a)"||"*"||"cos(b)") );
show(ex);
ex =擬合模型(Y( 名稱(“罪(一)* COS(二)”) ),效果(:年齡,性別,:身高),個性(“標準最小二乘法”),重點(“效果槓桿”),運行(:重量<< {預測實際情況(1),情節回歸(0) ),通過預測繪製殘差(1),繪圖效果槓桿(1)}));
SubstituteInto在第一個參數中搜索第二個參數,並將其替換為第三個參數。 AsName將字符串轉換為名稱。expr()函數用於傳遞表達式而不首先對其進行求值。
如果你這樣命名列,你會看到很多Name()包裝器
Re:使用“*”符號解析字符串,而不創建附加空格關於我的答复的一些說明:
該 “\ [... ] \“ 構造允許您將任何內容放在雙引號內,甚至更多雙引號。
evalinsert 替換由^字符包圍的變量的值。
Re:使用“*”符號解析字符串,而不創建附加空格你不能混合:D和:名字。
嘗試這樣的事情:
fitmodelstring = fitmodelstring || evalinsert("\[Y(:name("D^a[i]^ * ^b[j]^"), Efffects(]\");
Re:使用“*”符號解析字符串,而不創建附加空格我說過早解決了。
我嘗試了代碼,但它不適用於我在迭代兩個數組的情況的更複雜的上下文中。
如果不編寫所有代碼,這將無效,因為“name”一詞仍將顯示。

在循環之後,我將獲取最後一個字符串並首先解析它然後進行評估。
的eval(解析(fitmodelstring));
注意,上面沒有顯示整個循環字符串。
謝謝,
內特
Re:使用“*”符號解析字符串,而不創建附加空格在有問題的名稱周圍使用name()包裝器。
a="D";
b="L";
c="* 15";
f = "name(\!""||a||b||c||"\!")";
ex = parse(f);
show(ex);
ex =姓名(“DL * 15”);
包裝器不是真的存在;這是解析器的一個提示,這個名稱不符合通常的規則。出於同樣的原因,它也與包裝器一起顯示。另請注意\!“附加引號。