子集表持续显示旧行 - 如何在运行之间清除内存?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");