List Box() 内の Table Box() のスクリプト ヘルプこんにちは、みんな、
データテーブルからデータを取得し、ユーザーがさらなる分析のために選択できるようにそれをグラフィカルに表示する JSL コードを作成しようとしています。 私が取得したいのは、PCA プラットフォームからの固有値レポートとフィット モデル プラットフォームからの効果概要レポートを組み合わせたようなものです。 ビジュアルは PCA レポートに似ていますが、機能 (つまり、行を選択できること) は効果概要レポートにしたいと考えています。
PCA 固有値レポート (どのように表示したいか):

モデルの適合効果の概要レポート (私が望む機能)。 このプラットフォームでは、List Box() 内の行を選択し、「削除」または「追加」を選択できます。 削除や追加はしたくありませんが、ユーザーが (上記の出力から) 行を選択できるようにしたいのです。

私が作業しているデータ テーブルを添付しました。これは、以下の JSL コードの「Current Data Table()」です。 以下の JSL コードは、途中まではできますが、私が望むものを正確に得ることはできません。
Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>
コメントアウトされたセクションでは、コードから次の出力が得られます (ただし、行は選択できません)。

PC や固有値などのリストを生成するコードの、アウトライン ボックスより前の部分全体が必要かどうかは、本当にわかりません。しかし、列を扱っているので、それを行う論理的な方法のように思えました。データテーブルと関数にはリストが必要です。 必要がなくても機能します。
</CODE></P><P> </P><P>コメントアウトされた List Box() 呼び出しのいずれかまたは両方を Table Box() の周囲に含めると、次のようになります。 行は選択可能ですが、何も表示されません。</P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 221px;"><span class="lia-inline-image-display-wrapper" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 221px;"><img src="https://us.v-cdn.net/6038925/uploads/images/37045iA319787974999980/DiedrichSchmidt_3-1635336043749.png" role="button" title="DiedrichSchmidt_3-1635336043749.png" alt="DiedrichSchmidt_3-1635336043749.png" /></span></SPAN></SPAN></P><P>何が間違っているのかわかりません。Scripting Index には、Table Box() で List Box() 呼び出しを正しく使用する方法の限られた例が記載されています。 Fit Model プラットフォームのレポート ウィンドウからツリー構造をたどろうとしましたが、機能しません。</P><P> </P><P>要約すると、スクリプト内の次の点を修正したいと思います。</P><OL><LI>PC レポート (上の最初の画像) に示されているような累積パーセント曲線になるようにプロット 列ボックスを修正します。 これは項目 2 ほど重要ではありません。</LI><LI>Table Box() の周囲の List Box() 呼び出しを修正して、ユーザーがリスト ボックス内の行を選択し、その行を別の関数に送信してさらに分析できるようにします。</LI></OL><P>提案や助けをありがとう!、</P><P>DS</P></LINGO-BODY><LINGO-LABS id="lingo-labs-430708" slang="en-US" mode="NONE"><LINGO-LABEL>自動化とスクリプト作成</LINGO-LABEL><LINGO-LABEL>マスカスタマイゼーション</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-431611" slang="en-US" mode="NONE">Re: List Box() 内の Table Box() のスクリプト ヘルプ</LINGO-SUB><LINGO-BODY id="lingo-body-431611" slang="en-US" mode="NONE"><P>ここでは、レポート内のテーブルからデータを取得し、PLS レポートから T2 を取得する別の方法を示します。</P>
<P> </P>
<PRE><CODE class=" language-jsl">Names default to here(1);
dt = Open("$Sample_data/Quality Control/Chemical Reactor Process.jmp");
pls = dt << Run Script("Fit PLS (Pro Only)");
//get values for the first column with the name R²Y by searching for display elements that have a
//child header box containing specific values
(pls << XPath("//NumberColBox[NumberColBoxHeader[text()='R²Y']]"))[1] << get as matrix;
//generalize this into a function and then call it for others column headers
getColumn = function({c},(pls << XPath("//NumberColBox[NumberColBoxHeader[text()='" || c || "']]"))[1] << get as matrix);
getColumn("Q²");
getColumn("Y Responses");
//To get T2, you need to send the message to a specific fit within the platform. As Mark mentioned this is tricky because you
//need to send the message to the analysis layer (I've been calling it a scriptable object), but to find the right object you
//navigate the report structure. I like Xpath, so here is how I would get the report (implied with the XPath function),
//navigate to the outline box (picks the first one matching a name), get the scriptable object or analysis layer and then
//send the message to save T2.
firstfit = (((pls << XPath("//OutlineBox[contains(text(),'NIPALS Fit with ')]"))[1]) << Get Scriptable Object) << Save T Square();
firstfit << Save T Square;
//This might better illustrate what is happening
show properties( report(pls)[Outline Box( "Partial Least Squares" )][Outline Box( "NIPALS Fit with 6 Factors Using Fast SVD" )] << get scriptable object );
Re: List Box() 内の Table Box() のスクリプト ヘルプこの問題は、共通の混乱点から発生します。 JMP プラットフォームは、分析層とレポート層で構成されます。 分析レイヤーは計算を担当し、赤い三角形のメニューに表示されるコマンドに応答します。 レポート層は情報の表示を担当します。 レポート レイヤーは、表示ボックスの入れ子構造です。 T スクエアの保存メッセージをレポート レイヤーではなく分析レイヤーに送信する必要があります。 分析レイヤーへの参照は、プラットフォームの起動時に返されるものです。 例えば、
biv = Current Data Table() << Bivariate( Y( :weight ), X( :height ), Fit Line );
変数 biv は、プラットフォーム、より具体的には分析レイヤーへの参照を保存します。 次に、別のメッセージを使用して、関連するレポート レイヤーへの参照を取得します。
bivRep = biv << Report;
この説明であなたの質問が明確になることを願っています。
Re: List Box() 内の Table Box() のスクリプト ヘルプやあ@jthi 、
素早いフィードバックとご協力に改めて感謝いたします。 はい、<
さて、私の唯一の問題は、T²をどのように保存するかです。 PCA プラットフォームから問題のアウトライン ボックスにアクセスしようとするたびに、表示ボックスが機能するはずの <
ありがとう!、
DS
Re: List Box() 内の Table Box() のスクリプト ヘルプ項目 1 の場合:
これを行うための他の/より良い方法があると思いますが、<<
pcb << Lower(ncb << get as matrix);

コードでは次のようになります (参照を追加して使用します)。
もっと見る... 値を取得するには:
場合によっては、Make into data table を使用するだけで十分な場合があります (プラットフォームおよび By 変数を使用しているかどうかによって異なります)。

次に、結果のテーブルからテーブル スクリプトを確認します。


これにより、正しい表示ボックスへの参照を非常に迅速に取得できる場合があります。
Re: List Box() 内の Table Box() のスクリプト ヘルプやあ@jthi 、
まあ、DModX に関する部分は忘れてください。Scripting Index でその方法が示されており、期待どおりに機能します。 Save T Square の例がありますが、これは機能しません。 これからも頑張ります。 正しいアウトラインボックスを参照する必要があると思います。
ありがとう!、
DS
Re: List Box() 内の Table Box() のスクリプト ヘルプやあ@jthi 、
素早いフィードバックをありがとうございます。 以前にも試してみましたが、何も起こらなかったので、放棄して別のルートに行きましたが、どこにもつながりませんでした。 戻って試してみたところ、うまくいきました、ありがとう! 追加された機能は便利です。 これで、より重要な項目 2 が確実に解決されました。 項目 1 を修正する方法があれば、それは素晴らしいことですが、必須ではありません。
これは関連していますが、別のスレッドになる可能性があります (お知らせください。別のスレッドとして再投稿します)。
JSL を使用して DModX 値と T² 値を PCA プラットフォームからデータ テーブルに保存する方法をご存知ですか? これはすべて、このプロセスを自動化するか、少なくとも他の手順のいくつかを削除して、DModX と T² の数式を保存するために使用する PC の数を決定するための基本をユーザーに提供するためです。
ありがとう!、
DS
Re: List Box() 内の Table Box() のスクリプト ヘルプList Box() に対する特別な必要性はありますか? 使用できます<< 選択可能な行を設定();テーブルボックスで行を選択可能にしてから使用します<< set 行変更 function(Function({this}, );選択範囲に機能を追加します。
スクリプト索引からの例:
Names Default To Here(1);
New Window("Mountains",
tb = Table Box(
String Col Box("Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"}),
Number Col Box("Elevation (meters)", {8611, 681, 5895, 4199}),
Plot Col Box("", {8611, 681, 5895, 4199})
)
);
tb << Set Selectable Rows();
tb << set row change function(Function({this}, Print(this << get selected rows)));