相互作用効果に関するChar()私はこれがこれまでに頼まれたことがなくそして間違ったキーワードを捜していなければならないと信じるのが難しいです。
背景:ユーザーがFit Modelを実行し、興味のある結果をスクリプトとしてデータテーブルに保存したとします。保存したスクリプトからEffects()引数を抽出するようにJSLを書きました。効果(:A、:B:、:A *:B)があるとします。
私はすでにこの結果を得るJSLを書いています(私がモデルの効果リストでTransform Column()を使っていない限り - 全く新しいワームの缶を作成するでしょう):
testList = {:A, :B, :A*:B};私の現在の作業:私はユーザーがこれら3つの効果のうちの1つを選択できるようにJSLを書きたいと思います。
現在の状況:これまでにやったことはこれです:
win = New Window( "Test", Panel Box( "Choose an Effect", Radio Box( testList ) ) );
これを実行すると、"A"、"B"、および "Multiply"の効果を持つラジオボックスが表示されます。明らかに、ディスプレイボックスは単に "A * B"を表示するのではなく、Head()を3番目の効果から引き離すことを選択しています。
考えられる解決策:Head(testList [i])== "Multiply()"をチェックするループを書くことでこれを解決でき、そうであれば、Arg(testList [i]を抽出するための別のループをコーディングする) j)、これらを文字に変換して別のリストに入れ、Itemsを連結()して "*"セパレータを付けます。
質問:効果「A」、「B」、および「A * B」を持つラジオボックスを提供する、これより直接的な経路はありますか。
相互作用効果に関する再:Char()これが私が思いついたものです。一部のFit ModelパーソナリティにStandard Least Squareでは機能しないメッセージが含まれる可能性があるかどうかわからないので、Personalityを置き換えるのではなく、必要最小限のStandard Least Squareを作成することにしました。
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;相互作用効果に関する再: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;相互作用効果に関する再: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、そして本当に見苦しいName( "Atotal")* Name( "Btotal")を与えます。
いいえ、できればGet Effect Namesメッセージをお勧めします。名前を取得できるように、データテーブルに保存されているスクリプトを書き換えて標準最小二乗法を強制するようにしていると思います。
相互作用効果に関する再:Char()彼らが「チャード」されたら、Sをすることができます ubstituteInto コロンを削除する
相互作用効果に関する再:Char()標準最小二乗性格を強制するためにFit Modelスクリプトを単純に書き直して、エフェクト名を取得するのに十分なだけ(間違った)モデルを実行することもできますか?
相互作用効果に関する再:Char()これは実際に私のアプリケーションにとって非常に有望ですが、Fit Least Squaresパーソナリティでしか機能しません。残念ながら、私はFit Least SquaresだけでなくFit MixedおよびGeneralized Regressionでも機能するものが必要です。
相互作用効果に関する再:Char()これは機能しますが、コロンは残ります。また、列名にName()関数でJMPに列名の折り返しを強制する文字が含まれていると、これは非常に醜くなります。
相互作用効果に関する再: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 ) ) );相互作用効果に関する再:Char()間接ルートの方が簡単なこともあります。 スクリプトがあるので、バックグラウンドで実行してGet Effect Namesをfitモデルオブジェクトに送信すると、ラジオボタンに使用できるリストが得られます。