こんにちは、
掲示板の仲間たちのおかげで、列スイッチャーとローカル データ フィルターを含むスクリプトが完成しました。スクリプトは意図したとおりに動作し、次のステップとして、クライアント ベース用のアドインとしてパッケージ化したいと考えています。アドインの動作の詳細はわかったと思いますし、スクリプトを起動して、データのインポート、クリーンアップ、要約を実行してインターフェイスを作成できると思います。しかし、スクリプトを単独で起動した場合は正常に動作していた列スイッチャーを実行しようとすると、インターフェイスでエラーが発生します。列スイッチャーで新しい項目をクリックすると、次のエラーが発生します。このビューを作成するコードを添付しました。私のコードでは、これを要約データ テーブルに添付し、スクリプト内から実行しています。アドイン (スクリプトを添付した場所) 経由で実行すると、エラーが発生します。その後、そのウィンドウを閉じてデータ テーブルのボタンをクリックすると、同じ表示が作成され、エラーなく意図したとおりに動作します。そのため、何を変更すればよいのか、また、どのような知見が得られるのか、少し混乱しています。
アンディ

cell_sum << new script(
"Main Interface",
cell_sum = Current Data Table();
test = Fit Group(
Oneway(
Y( :Max Discharge Capacity ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
Oneway(
Y( :"Cycle Number (>0.8)"n ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
Oneway(
Y( :"Discharge Capacity @ 50 Cycles"n ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
Oneway(
Y( :"Remain % @ 50 Cycles"n ),
X( :Cathode Recipe.x ),
Quantiles( 1 ),
Means( 1 ),
Box Plots( 1 ),
Mean Diamonds( 0 ),
X Axis Proportional( 0 ),
Points Jittered( 1 ),
Grand Mean( 0 ),
),
<<{Arrange in Rows( 4 )}
);
colpick = test << Column Switcher(
:Cathode Recipe.x,
cell_sum << get column names( Ordinal, Nominal )
);
(test << top parent)[listboxbox( 1 )] << set script(
Try( test << remove local data filter );
mycurrent = ((test << top parent)[listboxbox( 1 )] << get selected)[1];
test << Local Data Filter(
Add Filter( columns( Column( mycurrent ) ), Display( Column( mycurrent ), N Items( 15 ), Find( Set Text( "" ) ) ) )
);
);
test << Local Data Filter(
Add Filter( columns( colpick << get current ), Display( colpick << get current, N Items( 15 ), Find( Set Text( "" ) ) ) )
);
);
cell_sum << run script( "Main Interface" );
JSLは、Pythonのように自動スコープ制御を行わないという点で、他の多くのプログラミング言語とは異なります。この場合、あなたはラインを使用しています
(test << top parent)[listboxbox(1)] << set script(..。リストボックスにスクリプトを追加します。このスクリプトが実行されると(ユーザーがアイテムを選択することにより)、そのスクリプト内のすべての変数を解決する必要があります。これがスコープの出番です。Pythonでは、各関数にローカルスコープがあり、各スコープはその親スコープとグローバルスコープを認識します(スコープは永続的です)。これにより、関数内の変数が親スコープまたはグローバルスコープ内の変数にアクセスできるようになります。JSLはこれを行いません-関数はスコープを作成および記憶せず、作成されたスコープはそれを作成したスコープの記録を保持しません。JSLの場合、スコープ外の変数にアクセスしたとき(名前空間:変数またAs Scoped(名前空間、変数)その後、デフォルトでここまたはグローバルスコープとそれだけです。
スコープ外の名前のスコープルックアップは次のようなものです。ローカル名前空間が存在する場合はそれを調べます(ローカル( {}、 ... )機能またはFunction({}、{デフォルトのローカル}、...)関数が最も一般的です)、見てくださいここ名前空間(存在する場合)、グローバル名前空間を確認します。時々それは列名を見る(例えば各行()について働き)。
ファイルでは、自動スコープのショートカット(たとえば、名前のデフォルトはHere(1) )、したがって、各変数はグローバルスコープです。したがって、リストボックススクリプトを実行すると、見つけることができますテストそれはグローバルスコープに見えるからです。ただし、アドインスクリプトはデフォルトで名前のデフォルトはHere(1)関数かどうかスクリプトファイルにあります。このスコーピングの下で、ファイルここスクリプトが終了すると名前空間が削除され、リストボックススクリプトが見つかりませんテストアクセスできるすべてのスコープ(つまり、独自のスコープ)ここ名前空間とグローバル名前空間)。あなたはオフにすることができます名前のデフォルトはHere(1)アドインバージョンではありますが、これはお勧めしません。スコープを明示的に制御することをお勧めします。
とはいえ、名前のデフォルトはHere(1)アドインバージョンでは、次のチェックボックスをオフにします。

やあ、
何が起こっているのかについての完全な説明と名前空間の説明をありがとうございました。
「デフォルトの名前(1)」が実際に何であるかを完全には理解していませんでした。 何か新しいことを学びました。
ありがとうございました。
アンディ