サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?I’m working on a JMP JSL script where I filter tables based on a ユーザーが提供する値のリスト. I create filtered tables using Subset.
私が遭遇している問題は次のとおりです:
-
最初の実行では、フィルタリングされたテーブルに正しい行が表示されます。
-
2 回目の実行で新しいリストを入力すると、フィルターされたテーブルに前回の実行からの行がまだ表示されたり、古い行と新しい行が結合されたりすることがあります。
-
I’m using Names Default To Here(1) and Clear Symbols() at the end of the script, but that JMPメモリからテーブルを完全にクリアしない, so Subset seems to retain references to old rows.
新しいサブセットを作成する前に、テーブルのメモリ参照を完全にクリアするための JMP の推奨方法はありますか?
hows to make Subset filtering 複数回の実行にわたって繰り返し可能 without old data showing up?
自動化とスクリプトデータの探索と可視化Re: サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?スクリプトの例を教えていただけますか?サブセットを正しく使用していれば、「古い行」は表示されません。
Re: サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?できるだけ短く、簡略化されたバージョンのコードを共有していただけますか。
...データテーブルの読み込みから始まります。例:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
質問に対する役立つ回答を素早く入手
正しい質問に素早く正しい答えを得る
Re: サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?このようなタイミングの問題のほとんどは、wait(0) によって修正できます。
サブセット コマンドの後に追加するだけです。サブセット コマンドの前にももう 1 つ追加します。
Re: サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?FilterByValueList = Function({sourceTbl, valueList, outName},
tempTbl = sourceTbl << Duplicate Window();
tempTbl << Clear Row States;
For(i = 1, i <= N Items(valueList), i++,
val = valueList[i];
tempTbl << Row Selection(
Select Where(:Batch Number == val, Current Selection("Extend"))
);
);
resultTbl = tempTbl << Subset(
Selected Rows(1),
Output Table Name(outName),
Invisible
);
Return(resultTbl);
);
// Example usage:
RunDataSubset = FilterByValueList(DataRuns, SelectedValues, "RunDataSubset");
MetaSubset = FilterByValueList(MetaRuns, SelectedValues, "MetaSubset");
//SelectedValues is a list
Re: サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?ありがとうございます。コードを貼り付け忘れていました。参考までにスニペットを載せておきます。ウィンドウから入力リストの値を読み取り、以下の手順を実行します。
// Directory path
pathDir = "J:\jmp-data\raw_data";
fileList = Files In Directory(pathDir);
Show(fileList);
selectedValues = {};
For(i = 1, i <= N Items(fileList), i++,
For(j = 1, j <= N Items(targetSource), j++,
If(Contains(fileList[i], targetSource[j]),
Insert Into(selectedValues, targetSource[j]);
Break();
);
);
);
countValues = N Items(selectedValues);
Show(selectedValues);
FilterByValueList = Function({sourceTbl, valueList, outName},
tempTbl = sourceTbl << Duplicate Window();
tempTbl << Clear Row States;
For(i = 1, i <= N Items(valueList), i++,
val = valueList[i];
tempTbl << Row Selection(
Select Where(:Batch Number == val, Current Selection("Extend"))
);
);
resultTbl = tempTbl << Subset(
Selected Rows(1),
Output Table Name(outName),
Invisible
);
Return(resultTbl);
);
// Example usage:
RunDataSubset = FilterByValueList(DataRuns, SelectedValues, "RunDataSubset");
MetaSubset = FilterByValueList(MetaRuns, SelectedValues, "MetaSubset");
また、ユーザー入力を取得するために作成されているウィンドウにはグローバル変数があり、これが古いデータが表示される原因である可能性があることもわかりました。
SelectedValuestext = Select_Values_test0 <
<GET text=""></GET>
<BR /> <P><CODE class=" language-jsl"> SelectedValuesText0 = {}; - still has nothing so whenever I run the code again it should take new user input values if they are diff.
</CODE></P>
Re: サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?<< Duplicate Window() はどこから来たのでしょうか、そしてそれは何をするのでしょうか?

JSLには、For()をあらゆる場面で使う代わりに使える強力な関数が数多くあります。Filter Each、Transform Each、For Eachを使えばリスト全体をより速く処理でき、Contains()を使えばループなしで選択処理を行える可能性も高くなります。
Re: サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?重複したウィンドウは存在しないことに気づいたので、次のように dt を作成しました。
dt = inputTable << Subset(All Rows, All Columns,Output Table("dt"),Invisible);<BR /><BR />
もっと簡単な方法があるかどうかは分かりません。
a = b は機能しません。データテーブルの場合、copy table() を探していましたが、copy file() を見つけました。
</CODE></PRE>
<P>また、この方法で作成すると、毎回テーブルを閉じる必要があります。その方が処理や配送が簡単だとわかりました。</P>
<PRE><CODE class=" language-jsl">
<BR />calcTable = Try( Data Table("KPI"), Empty() );
Re: サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?サブセットを正しく使用している場合、「古い行」は表示されません。
Re: サブセット テーブルに古い行が表示され続ける – 実行間でメモリをクリアするにはどうすればよいですか?この場合、なぜ2つのサブセットを作成するのか分かりません。
Names Default To Here(1);
path = Convert File Path("$SAMPLE_DATA/", windows);
files = Files In Directory(path);
targetfiles = {"Big Class.jmp", "Probe.jmp"};
files_of_interest = Filter Each({target}, targetfiles,
Contains(files, target);
);
create_filtered_table = function({dt, values, tablename}, {Default Local},
rows_of_interest = dt << Get Rows Where(Contains(values, :Filename));
dt_res = dt << Subset(Rows(rows_of_interest), Selected Columns(0), Output Table(tablename), Invisible);
return(dt_res);
);
dt1 = New Table("table1",
Add Rows(6),
Compress File When Saved(1),
New Column("Filename",
Character,
"Nominal",
Compact(),
Set Values({"Big Class.jmp", "a", "b", "c", "Big Class.jmp"})
)
);
dt2 = New Table("table1",
Add Rows(6),
Compress File When Saved(1),
New Column("Filename",
Character,
"Nominal",
Compact(),
Set Values({"Probe.jmp", "a", "b", "c", "Big Class.jmp"})
)
);
dt_res1 = create_filtered_table(dt1, files_of_interest, "Table1");
dt_res2 = create_filtered_table(dt2, files_of_interest, "Table2");