一致するペアのスクリプトに対するユーザー入力ユーザーが一致ペアの列を入力すると、入力された選択された列を取得できる、一致ペア用の JMP スクリプトを作成したいと考えています。
だから次のようなもの
dt=現在のデータテーブル();
一致したペア();
Y、ペアの応答 << 選択を取得;
次に、独自の数式で選択した列を使用したいと思います。 しかし、列を選択する方法がわかりません。
Re: 一致ペア スクリプトのユーザー入力これを 2 ステップのスクリプトとして機能させることができました。 見つけたらぜひ教えてください。 これらを組み合わせてアドインにしたいと思います。
Re: 一致ペア スクリプトのユーザー入力通常、スクリプトはモーダル ダイアログを表示して、ユーザーに分析する列を選択するよう求めます。 ユーザーがダイアログを閉じると、ダイアログがアンロードされます。 これで、プラットフォームを起動して他の計算を続行するための列が完成しました。
ごく最近、あなたと同じように起動ダイアログを使用する方法について議論されましたが、プラットフォームへの参照を取得し、スクリプトの残りの部分の評価を制御する方法について議論されました。 今のところ見つからないんですが…
Re: 一致ペア スクリプトのユーザー入力一致したペアのプラットフォームを実行し、一致したペアに入れられた列を取得し、それらの列を追加の計算に使用するスクリプトを実行しようとしています。
Re: 一致ペア スクリプトのユーザー入力あなたが何をしようとしているのか理解できません。 スクリプトを実行する前に、ユーザーはすでに一致ペア プラットフォームを開いているはずで、Y ロールのデータ列を検出する必要があると思いました。 あなたのコード (以下) は、代わりに一致ペアの起動ダイアログを開くだけです。
dt = current data table();
Matched Pairs();
したがって、参照するアウトライン ボックスはありません。
Re: 一致ペア スクリプトのユーザー入力私はちょうどこれをしました:
dt=現在のデータテーブル();
マッチドペア();
// マッチド ペア プラットフォームを検索し、その式を取得します
窓 =ウィンドウリストの取得();
ために( w = 1 、w <= N 個のアイテム(ウィンドウ)、w++、
タイトル = ウィンドウ[w] <<ウィンドウタイトルの取得;
もしも(含まれています( タイトル、 「マッチドペア」 )、
obj = ウィンドウ[w][アウトラインボックス( 1 )] <<スクリプト可能なオブジェクトの取得;
s = オブジェクト <<スクリプトの取得;
壊す();
);
);
// Y() 名前付き引数を分離します
s =引数(名前の説明( s )、 1 );
n 応答 = N 引数(名前の説明( s );
// Y ロールのデータ列を取得します
列参照 =リスト();
ために( c = 1 、c <= n 応答、C++、
に挿入(参照番号、引数(名前の説明( s )、 c ) );
);
// 結果を調べるか、スクリプトの残りの部分で列参照を数式に使用します
見せる(列参照);
そして、この部分が機能せず、次のエラーが発生します。
'window[w][Outline Box(1)]',window[w][/*###*/Outlinebox(1)] のアクセスまたは評価で表示ボックスに添字を付けることはできません
列を選択して計算を行う前に、この部分が機能することを確認しようとしていました。
Re: 一致ペア スクリプトのユーザー入力Names Default to Here( 1 );
// simulate actions by user before running the script
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
dt << Matched Pairs(
Y( :Runtime, :RunPulse, :RstPulse, :MaxPulse ),
Separate Pairs( 0 ),
Reference Frame( 0 )
);
// your script begins here
// find Matched Pairs platform and get expression for it
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
title = window[w] << Get Window Title;
If( Contains( title, "Matched Pair" ),
obj = window[w][OutlineBox(1)] << Get Scriptable Object;
s = obj << Get Script;
Break();
);
);
// isolate Y() named argument
s = Arg( Name Expr( s ), 1 );
n response = N Arg( Name Expr( s ) );
// get data columns in Y role
col ref = List();
For( c = 1, c <= n response, c++,
Insert Into( col ref, Arg( Name Expr( s ), c ) );
);
// examine results, or use the column references in the rest of the script for a formula
Show( col ref );
Re: 一致ペア スクリプトのユーザー入力私の理解が正しければ、Y を 2 つ入れればうまくいきます。 2 つ以上の Y を入力した場合はどうなりますか。それをリストまたは行列として入力できますか? 次に、リストを順番に見ていきますか?
Re: 一致ペア スクリプトのユーザー入力解決策を投稿した後で、私の解釈が正しければ、Matchedpairs オブジェクトへの参照が存在しないことに気付きました。 それを見つけなければなりません。 以下はスクリプトの更新バージョンです。
Names Default to Here( 1 );
// simulate actions by user before running the script
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Matched Pairs( Y( :height, :weight ), Reference Frame( 1 ) );
// your script begins here
// find Matched Pairs platform and get expression for it
window = Get Window List();
For( w = 1, w <= N Items( window ), w++,
title = window[w] << Get Window Title;
If( Contains( title, "Matched Pair" ),
obj = window[w][OutlineBox(1)] << Get Scriptable Object;
s = obj << Get Script;
Break();
);
);
// get data columns in Y role
y1 = Arg( Arg( Name Expr( s ), 1 ), 1 );
y2 = Arg( Arg( Name Expr( s ), 1 ), 1 );
// examine results, or use the column references in the rest of the script for a formula
Show( y1, y2 );
Re: 一致ペア スクリプトのユーザー入力あなたのリクエストは、ユーザーが既に一致ペアを起動していて、それに対してスクリプトを実行したいという意味だと解釈します。 つまり、スクリプトはユーザーに列を要求したり、プラットフォーム自体を起動したりしません。
一致ペアの Y ロールで使用されるデータ列を返すメッセージが見つかりません。 私は、起動されたプラットフォームのスクリプトを取得し、それを解析してデータ列を取得するアプローチを採用しました。
Names Default to Here( 1 );
// simulate actions by user before running the script
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
mp = dt << Matched Pairs( Y( :height, :weight ), Reference Frame( 1 ) );
// script begins here
s = mp << Get Script;
y1 = Arg( Arg( Name Expr( s ), 1 ), 1 );
y2 = Arg( Arg( Name Expr( s ), 1 ), 1 );
// examine results, or use the column references in the rest of the script for a formula
Show( y1, y2 );