JSL을 사용하여 많은 그래프를 작성할 때 JMP가 느려짐여러 그래프를 생성하고, 각 그래프에 대한 회귀 적합도를 결정한 다음, 모든 회귀 계수를 표에 저장하는 스크립트를 작업 중입니다. 스크립트는 제가 원하는 작업을 수행하지만, 계산할 열 수가 늘어나면서 갑자기 중단됩니다. 스크립트는 For 루프 내에서 생성된 플롯과 생성된 패널을 백그라운드에 유지하는 것 같습니다. 루프 내에서 플롯을 닫으려고 해도 마찬가지입니다. (플롯을 저널(PDF 내보내기용)로 보내고 회귀 계수를 추출한 후에는 개별 그래프나 표의 상자 데이터가 필요하지 않습니다.)
디버거를 사용하여 스크립트를 단계별로 실행하면 스크립트가 끝까지 실행되고 개별 창이 표시되지 않지만, 디버거를 중지하면(빨간색 사각형) for 루프 내의 모든 개별 창이 생성됩니다. 스크립트는 600개가 넘는 열을 반복하고, 백그라운드에서 생성되는 해당 개수의 창(숨김으로 설정됨) 때문에 시간이 지남에 따라 jmp가 갑자기 중단됩니다.
스크립트를 사용하여 데이터 세트를 반복하여 분석을 수행하거나 여러 그래프를 생성할 때, 생성된 "중간" 창, 플롯 등을 닫아 메모리 부담을 최소화하는 가장 좋은 방법은 무엇입니까?
아래는 스크립트에서 열을 반복하는 부분입니다.
For( i = 7, i <=ncols, i++,
biv = dt << Bivariate(
Y(Column(colList[i]) ),
X( :Temperature ),
Fit Line( {Line Color( "Medium Dark Red" )} ), invisible);
rbiv = biv << Report;
biv << Close;
rbiv[Frame Box( 1 )] << Frame Size( 550, 400 );
rbiv << Page Break;
rbiv << Journal;
dtx= Report( biv )["Parameter Estimates"][Table Box( 1 )] << make combined data table;
// dty= Report( biv )["Lack Of Fit"][Table Box( 1 )] << make combined data table;
dtSlope << Concatenate(dtx ,"Append to first table");
// dtFit << Concatenate(dty ,dtSlope, "Append to first table");
// Close(dty, NoSave);
Close(dtx, NoSave);
);
자동화 및 스크립팅Re: JSL을 사용하여 많은 그래프를 작성할 때 JMP가 느려짐강조된 줄을 "rbiv << 창 닫기;"로 변경해야 한다고 생각합니다. 또한 더 이상 필요하지 않은 곳(예: 화살표가 가리키는 곳)으로 옮겨야 합니다.

"rbiv << 창 닫기;"는 보고서 창을 닫는다는 의미입니다.

"biv << Close Window;"도 작동한다는 게 놀랍네요. 하지만 이 기능은 문서화되지 않았기 때문에 추천하지는 않겠습니다.
Re: JSL을 사용하여 많은 그래프를 작성할 때 JMP가 느려짐JMP 버전에 따라 해당 창이 제대로 닫혔는지 확인하는 것 외에도 이변수 메시지에 Invisible 또는 Private를 추가하고 결합된 데이터 테이블을 만들 수도 있습니다.
Names Default To Here(1);
cols = {"height", "weight"};
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt_res = Empty();
For Each({colname}, cols,
// You can also use Private, it is generally faster but more dificult to debug and utilize
biv = dt << Bivariate(Y(Eval(colname)), X(:weight), Fit Line({Line Color({230, 159, 0})}), Invisible);
// this can also be made invisible/private
dt_biv = Report(biv)["Parameter Estimates"][Table Box(1)] << make combined data table(Invisible);
biv << close window;
dt_biv << Delete Scripts(dt_biv << Get Table Script Names);
// wait(0); // wait(0) isn't usually not necessary
If(Is Empty(dt_res),
dt_res = dt_biv;
dt_res << Set Name("Biv Parameter Estimates");
,
dt_res << Concatenate(
dt_biv,
"Append To First Table"
);
Close(dt_biv, no save);
);
);
dt_res << show window; // use result
Re: JSL을 사용하여 많은 그래프를 작성할 때 JMP가 느려짐감사합니다. 두 가지 해결책/권장 사항 모두 도움이 되었지만, 이유는 달랐습니다.
네, 오류는 biv << Close 명령을 잘못 사용한 것이지 biv << Close Window 명령을 잘못 사용한 것이 아닌 것 같습니다. 닫다 명령은 오류를 발생시키거나 어떤 식으로도 보이지 않았습니다(그래서 문제가 발생한 것입니다). 이는 JSL의 가장 큰 문제점 중 하나일 수 있습니다. 올바르지 않거나 적절하지 않은 명령이나 인수는 많은 경우 오류를 발생시키지 않고 아무 작업도 수행하지 않습니다. 따라서 스크립트 자체의 문제인지 아니면 명령의 잘못된 사용인지 문제 해결이 어렵습니다.
올바른 Close 명령으로 변경한 후에도 스크립트에서 잘못된 위치가 발견되었는데, 매개변수 추정값을 가져오려면 해당 명령이 여전히 필요했기 때문에 오류가 발생했습니다.
정말 도움에 감사드립니다....
Re: JSL을 사용하여 많은 그래프를 작성할 때 JMP가 느려짐전체 이변량 적합 보고서가 필요하신가요? 아니면 매개변수 추정치(기울기, 절편, 관련 표준오차 및 t-비)만 필요하신가요? 후자라면, Fit Y by X 대신 Fit Curve를 사용해 보셨나요? 제 경험상 Fit Curve가 더 빠르고 많은 곡선을 더 쉽게 처리할 수 있습니다.