使用“*”符号解析字符串,而不创建其他空格你好,
我正在以编程方式迭代几个数组来创建一个字符串变量,可以对其进行解析和评估,以便自动将模型拟合到数据中。
我遇到的问题是列标题名为“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”);
包装器不是真的存在;这是解析器的一个提示,这个名称不符合通常的规则。出于同样的原因,它也与包装器一起显示。另请注意\!“附加引号。