子集表持續顯示舊行 - 如何在運行之間清除記憶體?I’m working on a JMP JSL script where I filter tables based on a 使用者提供的數值列表. I create filtered tables using Subset.
我遇到的問題是:
-
第一次運行時,篩選後的表格顯示了正確的行。
-
第二次運行時,如果我輸入新列表,篩選後的表格有時仍然顯示上次運行的行,或將舊行和新行合併在一起。
-
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?
自動化和腳本編寫數據探索與視覺化回覆:子集表始終顯示舊行 - 如何在運行之間清除記憶體?能否提供一下你的腳本範例?如果你正確使用了子集功能,它就不會顯示「舊行」。
回覆:子集表始終顯示舊行 - 如何在運行之間清除記憶體?請您分享一下您的程式碼的簡化版本,越短越好。
首先,載入資料表,例如
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
快速獲得您問題的有用答案
快速獲得正確問題的正確答案
回覆:子集表總是顯示舊行 - 如何在運行之間清除記憶體?大多數此類計時問題都可以透過wait(0) 來解決。
只需將其添加到子集命令之後——或許還可以在子集命令之前再添加一個。
回覆:子集表總是顯示舊行 - 如何在運行之間清除記憶體?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
回覆:子集表總是顯示舊行 - 如何在運行之間清除記憶體?謝謝。我忘了貼上程式碼,這裡是程式碼片段供您參考;透過視窗讀取輸入清單值,然後執行以下操作:
// 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>
回覆:子集表總是顯示舊行 - 如何在運行之間清除記憶體?<< Duplicate Window() 函數來自哪裡?它的作用是什麼?

JSL 提供了許多強大的函數,您可以用來取代到處使用 `for()` 迴圈。您可以使用 `Filter Each`、`Transform Each` 和 `For Each` 函數更快地遍歷列表,而且您很可能可以使用 `Contains()` 函數在不使用循環的情況下完成選擇。
回覆:子集表總是顯示舊行 - 如何在運行之間清除記憶體?我意識到不存在重複窗口,所以我繼續創建瞭如下所示的 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() );
回覆:子集表總是顯示舊行 - 如何在運行之間清除記憶體?如果正確使用子集功能,就不會顯示「舊行」。
回覆:子集表總是顯示舊行 - 如何在運行之間清除記憶體?我不確定在這種情況下你為什麼要建立兩個子集。
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");