Char()关于交互效果我很难相信以前没有问过,必须搜索错误的关键字。
背景:我假设用户已运行Fit Model并将感兴趣的结果作为脚本保存到数据表中。我编写了JSL来从保存的脚本中提取Effects()参数。我们假设我们有效果(:A,:B:,:A *:B)。
我已经编写了JSL来获取这个结果(只要我不在模型的效果列表中使用Transform Column() - 这将创建一个全新的蠕虫):
testList = {:A, :B, :A*:B};我的当前任务:我想编写JSL以使我的用户能够选择这三种效果中的一种。
现状:到目前为止,我所做的是:
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( testList ) ) );
如果我运行它,我会得到一个带有效果“A”,“B”和“Multiply”的Radio Box。很明显,Display Box选择将Head()拉出第三个效果,而不是简单地显示“A * B”。
可能的解决方案:我想我可以通过编写循环来检查Head(testList [i])==“Multiply()”,如果是,然后编写另一个循环来提取每个Arg(testList [i],j),将它们转换为字符,将它们放在另一个列表中,将Concat Items()转换为“*”分隔符。
问题:是否有比这更直接的路线会给我一个带有效果“A”,“B”和“A * B”的收音机盒?
Re:Char()关于交互效果这就是我想出的。我决定建立一个准系统标准最小二乘,而不是替代人格,因为我不知道某些适合模型人物是否可能包含在标准最小二乘中不起作用的消息。
script = (Current Data Table() << Get Property("Fit Model"));
scriptAsStandardLeastSquares = Expr(Fit Model());
nFitModelArgs = N Arg( script );
For( k = 1, k <= nFitModelArgs, k++,
headString = Char( Head( Arg( script, k ) ) );
If(
headString == "Y" | headString == "Effects", Insert Into(scriptAsStandardLeastSquares, Arg(script, k))
);
);
Insert Into(scriptAsStandardLeastSquares, Expr(Run()));
Insert Into(scriptAsStandardLeastSquares, Expr(Personality("Standard Least Squares")));
Insert Into(scriptAsStandardLeastSquares, Expr(invisible));
fm = Eval(scriptAsStandardLeastSquares);
effectList = (fm << Get Effect Names);
fm << Close Window;Re:Char()关于交互效果这是我使用的那种代码:
// s = model script
// easier to manipulate strings
str = Char(NameExpr(s));
// ensure there is a variable to store a reference to the model object
str = "mwin=" || str;<BR /><BR /><BR />// run in the background
SubstituteInto(str,"Fit Model(","Fit Model(Invisible,");
// change emphasis (could also change personality)
pattern = "Emphasis(" + PatArb() + ")" + PatRem();
replace = "Emphasis( Minimal Report ), Run)";
Pat Match(strScript, pattern, replace);
// execute and retrieve results
Eval(Parse(str));
effects = mwin << Get Effect Names;Re:Char()关于交互效果不,这不行。假设我有一位科学家故意在列名中使用冒号(也许代表一个比例)。然后是JSL @txnelson 可能看起来像这样:
testList = {:Name("A:total"), :Name("B:total"), :Name("A:total") * :Name("B:total")};
newtestlist = testList;
For( i = 1, i <= N Items( testlist ), i++,
newtestlist[i] = Substitute(Char( testlist[i] ), ":", "")
);
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( newtestList ) ) );然后收音机盒给出Atotal,Btotal和看起来非常难看的名字(“Atotal”)*名字(“Btotal”)。
不,我想我会更喜欢Get Effect Names消息,只要我可以让它工作。我想我正在重写保存到数据表的脚本以强制标准最小二乘法,所以我可以得到名字。
Re:Char()关于交互效果一旦他们“被追逐”,你就可以做一个S. ubstituteInto 删除冒号
Re:Char()关于交互效果虽然也许我可以简单地重新编写Fit Model脚本来强制标准最小二乘的个性并运行(错误的)模型到足以让我获得效果名称?
Re:Char()关于交互效果这对我的应用来说实际上非常有前景,但只适用于Fit Least Squares的个性。不幸的是,我需要的东西可以在Fit Least Squares中运行,但也可以使用Fit Mixed和Generalized Regression。
Re:Char()关于交互效果这有效但留下了冒号。如果列名包含强制JMP在Name()函数中包装列名的字符,这也会变得非常难看。
Re:Char()关于交互效果我以前用以下方式解决了这个问题
testList = {:A, :B, :A * :B};
newtestlist = testList;
For( i = 1, i <= N Items( testlist ), i++,
newtestlist[i] = Char( testlist[i] )
);
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( newtestList ) ) );Re:Char()关于交互效果有时间接路线更容易。 由于您有脚本,在后台运行它将获取效果名称发送到适合模型对象,然后您有可用于单选按钮的列表。