하위 집합 테이블이 계속해서 오래된 행을 표시합니다. 실행 사이에 메모리를 지우는 방법은 무엇입니까?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?
자동화 및 스크립팅데이터 탐색 및 시각화Re: 하위 집합 테이블이 계속 오래된 행을 표시합니다. 실행 사이에 메모리를 지우는 방법은 무엇입니까?스크립트 예시를 보여 주시겠어요? subset을 제대로 사용한다면 "이전 행"은 표시되지 않습니다.
Re: 하위 집합 테이블에 오래된 행이 계속 표시됩니다. 실행 사이에 메모리를 지우는 방법은 무엇입니까?가능한 한 짧게 코드를 단순화해서 공유해 주시겠습니까?
... 데이터 테이블 로딩으로 시작합니다. 예:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
귀하의 질문에 대한 빠르고 유용한 답변을 받으세요
올바른 질문에 대한 올바른 답변을 빠르게 얻는 방법
Re: 하위 집합 테이블이 계속 오래된 행을 표시합니다. 실행 사이에 메모리를 지우는 방법은 무엇입니까?이러한 타이밍 문제의 대부분은 wait(0)을 통해 해결될 수 있습니다.
subset 명령어 뒤에 추가하면 되고, subset 명령어 앞에도 하나 더 추가하면 됩니다.
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: 하위 집합 테이블이 계속 오래된 행을 표시합니다. 실행 사이에 메모리를 지우는 방법은 무엇입니까?subset을 올바르게 사용하면 "이전 행"이 표시되지 않습니다.
Re: 하위 집합 테이블에 오래된 행이 계속 표시됩니다. 실행 사이에 메모리를 지우는 방법은 무엇입니까?이 경우 왜 두 개의 하위 집합을 생성하는지 잘 모르겠습니다.
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");