Run in Fit Model でレポートが生成されないようにするにはどうすればよいですか?次のことを行うスクリプトを作成しています。
- [モデルのフィット] ウィンドウを開きます。
- ユーザーは、[モデルの適合] ウィンドウのマクロやその他の機能を使用してデータを入力できるようになります。
- ユーザーが「実行」をクリックできるようにすると、時間のかかる計算が実行され、レポートが作成されます。
「実行」をクリックしたときに実行される計算は、「実行」ボタンに保存されているスクリプトによって生成されます。このスクリプトはレポートを生成します。これはユーザーがすべき見る。ただし、スクリプトが [実行] ボタンに追加されるため、目的のレポートが表示されますが、その後に、Run が独自に生成する最小二乗法フィット レポートが表示されます。最小二乗法フィット レポートはユーザーにとっては意味がありません。
以下のスクリプトは問題を示しています。 このスクリプトでは、[実行] ボタンの式「runExpr」により、単純にクローン データ テーブルが作成されます。これは図を簡略化するためです。実際のスクリプトでは、その式 (runExpr) は、[モデルのフィット] ウィンドウに入力された効果に基づいて多くの分析を実行します。 また、実際のスクリプトでは、ユーザーは対話的に [モデルの適合] ウィンドウに値を入力します。便宜上、以下のスクリプトに [Fit Model] ウィンドウを設定しました。
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr);
ユーザーが行うように [実行] をクリックすると、クローン テーブルが表示されますが、上部のウィンドウは [実行] コマンドによって生成された最小二乗法レポートです。そのレポートが表示されないようにしたいのですが。
そのために:
- runExpr で Throw() と Stop() を使用しようとしましたが、役に立ちませんでした。
- モーダル ウィンドウの使用を検討しましたが、モデルのフィット ウィンドウにマクロ機能が必要であり、モーダル ウィンドウのヘルプを作成する方法がわかりません。
- 最小二乗法レポートに対処するために私が思いつく唯一の方法は、以下に示すように、スクリプトにタイミング ループを追加することです。 しかし、これには危険が伴います。runExpr が完了するまでにどれくらいの時間がかかるかを知る方法はありません。ユーザーが「実行」をクリックしないことに決めた場合、スクリプトはタイムアウトになるまで実行され続けます。
ご意見やご協力をいただければ幸いです。
Names Default To Here( 1 );
runExpr = Expr(
// Creates a clone data table for illustration;
dt << Subset( Output Table( "Clone Table" ), All rows );
fm_Flag = 1
);
fm_Flag = 0; // Sets flag for timing
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fmSLS = Fit Model(
Y( :weight ),
Effects( :age, :height, :age * :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
);
r = fmSLS << Report;
r[Button Box( 9 )] << Set Script( runExpr; fm_Flag = 1 );
For( i = 1, i <= 100, i++,
If(fm_Flag < 1, Wait(0.5), windowsopen = Get Window List(); windowsopen[nItems(windowsopen)] << Close Window; Stop() )
);
マスカスタマイゼーションRe: Run in Fit Model でレポートが生成されないようにする方法は?いやあ、素晴らしいですね!まさに完璧な「すぐに使える」ソリューションです。
今日後半にカスタム ボタンの配置をいじるつもりだったのですが、実際に配置しようとしていたかはわかりません以上実行ボタン。これは素晴らしいソリューションであり、このコンセプトを他の場所でも使用できると思います。きっと多くのユーザーが便利だと思うでしょう!
どうもありがとうございます!!!
Re: Run in Fit Model でレポートが生成されないようにする方法は?あはは![実行] ボタンを削除したり変更したりするのは難しいように思えますが、新しいボタンをその上に置くことができます (少なくとも Windows 上の JMP 15.2.1 では...)。
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
// New button the user should click on
(((fm << XPath("//ButtonBox[@title='Run']"))[1] << parent) ) << prepend(
bb = Button Box("Launch custom script", run expr; fm << Close Window;) );
//make sure it is right on top of the old one
bb << set property("Margin", {Left(0), Right(0), Bottom(0), Top(0)});
// Rename old button in case it isn't hidden, and show error if user clicks it
(fm << XPath("//ButtonBox[@title='Run']"))[1] << Set Script( New Window( "Use other button",
Text Box("Woops...\!n\!nPlease use the button at the bottom of the fit model dialog to launch this script.")));
(fm << XPath("//ButtonBox[@title='Run']"))[1] << Set Button Name( "Do Not Use");Re: Run in Fit Model でレポートが生成されないようにする方法は?マーク、あなたはとても良い質問をし、良い指摘をしています。もしかしたら、私の目標を達成するためのもっと良い方法があるかもしれません。上記の「ih」に対する私の返信をご覧ください。私がモデルのフィット ウィンドウを必要としているのは、単にユーザーが効果を構築できる柔軟性があるためです。 私が書いているスクリプトは、これらの効果を使用して、分数ブートストラップ重みを使用してモデルを構築します。(とにかく、上記の「ih」への返信に詳細があります。)
モデル効果の構築に役立つスクリプト関数があることは知っていますが、実際には、[モデルのフィット] ウィンドウに存在する多くの機能を複製する必要があります。モデルを当てはめることなく、そのウィンドウをエフェクト構築に使用できればいいのにと思います。
Re: Run in Fit Model でレポートが生成されないようにする方法は?この提案には本当に感謝しています。これは私が考えたことではありませんでした。そして、それが最善の方法かもしれません。ただし、ユーザーが [実行] をクリックすると (必然的に)、モデルの適合が実行されるため、ユーザーはスクリプトを再度実行する必要があります。それは最適ではありません。しかし、もしかしたらこのアイデアを活用できるかもしれません。
あなたもマークも良い質問を提起しました。それは、なぜ私がモデルのフィット ウィンドウを使用することに固執するのかということです。これは、ユーザーがマクロとクロス機能にアクセスできるようにする必要があるためです。ユーザーは重要だと考える効果を追加します。多くの場合、これには完全な要因モデルといくつかの追加の三元交互作用項が含まれます。私は、ユーザーがモデルの「タイプ」を入力できるモーダル ダイアログを作成するというアイデアを考えましたが、この機能ではユーザーが制限されてしまいます。そこで私は、Fit Model のほとんどの機能を備えたウィンドウが必要であるということに何度も戻りました。また、ユーザーはモデルのフィットを使用して効果を入力することに慣れているため、その観点からそのダイアログを使用することは理にかなっています。(提供していただいたリンクには感謝していますが、エフェクトの構築については触れていません。モデルの適合に存在する交差、完全階乗、階乗から次数へ、および多項式から次数への機能を複製するには、多くのスクリプトが必要になります。実際のところ、私には能力があるとは思っていません!)
さて、なぜしたくないのですか走る適合モデル?必要なのは応答と効果だけだからです。エフェクトを構築するには Fit Model の機能が必要なだけです。カスタム スクリプトは、これらを分数ランダム重み付けブートストラップとともに使用し、モデルの平均化を使用してモデルを作成します。これらのモデルと概要レポートを作成するスクリプトは、現在、[実行] ボタンに配置されている式です。したがって、[実行] をクリックするとカスタム レポートが作成されます。ユーザーが「実行」をクリックすると、モデルの適合によって作成された無関係なレポートがカスタム レポートの上に表示されることを除いて、すべてが良好です。
改めて、ご協力ありがとうございました。カスタムボタンのアイデアはぜひ試してみたいと思います。
Re: Run in Fit Model でレポートが生成されないようにする方法は?最小二乗法フィット プラットフォームが必要ないのに、なぜモデルのフィット ダイアログを使用するのですか? あなたが望むことを達成する別の方法があるかもしれません。
Re: Run in Fit Model でレポートが生成されないようにする方法は?[モデル仕様] ダイアログ ボックスのどの部分が必要ですか? そのステップを、正確なニーズに合わせた新しいウィンドウに置き換えた方がよいと思わずにはいられません。この投稿の例が役立つかもしれません:
完全にモーダルで列の入力を求めるプロンプト
[モデル仕様] ウィンドウを使用する場合は、ユーザーがクリックできる新しいボタンを指定できます。
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
// Show error if user clicks the wrong button
(fm << XPath("//ButtonBox[@title='Run']"))[1] << Set Script( New Window( "Use other bottom",
Text Box("Woops...\!n\!nPlease use the button at the bottom of the fit model dialog to launch this script.")));
// Button the user should click on
(fm << XPath("//OutlineBox"))[1] << Append(Button Box("Launch custom script", run expr; fm << Close Window;));<BR />
Re: Run in Fit Model でレポートが生成されないようにする方法は?そうですね、ボタン ボックス内のスクリプトは、[実行] ボタンの組み込み動作が実行される前に実行されるようです。
この小さな問題は厄介です! アクション (実行ボタンを押すなど) が発生するまでスクリプトの実行を保留する方法が必要です。 または、組み込み動作の実行を防ぐためです (ただし、前述したように、runExpr に Throw と Stop を配置しても機能しませんでした)。
助けてくれてありがとう、マーク。Re: Run in Fit Model でレポートが生成されないようにする方法は?あなたは正しいです。 イラストを変更しようとしましたが、ボタン ボックスに添付されているスクリプトは最小二乗法レポートが作成される前に評価されるため、効果がありません。
Names Default to Here( 1 );
run expr = Expr(
// desired report
personality = Report( fm )[ComboBox(1)] << Get Selected;
Show( personality );
// undesired report
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
fm = dt << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" )
);
Report( fm )[ButtonBox(9)] << Set Script( run expr );
// nothing after this point
Re: Run in Fit Model でレポートが生成されないようにする方法は?マーク、ありがとう。でも、これは私の状況ではうまくいかないと思います。ユーザーは、「モデルの適合」ウィンドウにデータを入力する必要があります。ウィンドウ コンポーネントをスクリプトに追加すると、ユーザーが [モデルのフィット] ウィンドウにデータを入力する前にコンポーネントが実行されます。したがって、ユーザーが「実行」をクリックすると、スクリプトのその部分は「削除」されます。あなたが提案している方向に沿った私の非常に洗練されていない回避策を確認するには、私の投稿の 2 番目のスクリプトを参照してください。ユーザーがモデルに適合するのにかかる時間と、[実行] ボタンでスクリプトを実行するのにかかる時間を考慮する必要があります。
Re: Run in Fit Model でレポートが生成されないようにする方法は?[実行] ボタン ボックスに添付するスクリプトを変更する方法がわかりませんが、後でウィンドウを見つけて閉じることはできます。 この図を参照してください。
fm = Current data Table() << Fit Model(
Y( :weight ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" )
);
fls = fm << Run;
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
If( Contains( window[w] << Get Window Title, "Fit Least Squares" ),
window[w] << Close Window;
Break();
);
);