List Box() 내의 Table Box()에 대한 스크립팅 도움말안녕 모두,
데이터 테이블에서 데이터를 가져오고 사용자가 추가 분석을 위해 선택할 수 있도록 그래픽으로 표시하는 일부 JSL 코드를 작성하려고 합니다. 내가 얻고자 하는 것은 PCA 플랫폼의 고유값 보고서와 모델 적합 플랫폼의 효과 요약 보고서 간의 혼합과 같은 것입니다. 시각적 개체가 PCA 보고서처럼 보이지만 효과 요약 보고서의 기능(예: 행 선택 가능)을 원합니다.
PCA 고유값 보고서(원하는 모양):

Fit Model Effect Summary 보고서(원하는 기능). 이 플랫폼에서는 목록 상자()에서 행을 선택하고 "제거" 또는 "추가"를 선택할 수 있습니다. 제거하거나 추가하고 싶지는 않지만 사용자가 위 출력에서 행을 선택할 수 있기를 바랍니다.

내가 작업하고 있는 데이터 테이블을 첨부했습니다. 이것은 아래 JSL 코드의 "현재 데이터 테이블()"입니다. 아래의 JSL 코드는 일부를 얻을 수 있지만 정확히 내가 원하는 것은 아닙니다.
Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>
주석 처리된 섹션을 사용하여 코드에서 다음과 같은 출력을 얻습니다(그러나 행을 선택할 수 없음).

PC 및 고유값 등에 대한 목록을 생성하는 코드의 전체 사전 개요 상자 부분이 필요한지 정말 모르겠습니다. 데이터 테이블과 기능에는 목록이 필요합니다. 필요하지 않더라도 작동합니다.
</CODE></P><P> </P><P>Table Box() 주위에 주석 처리된 List Box() 호출 중 하나 또는 둘 다를 포함하면 다음과 같은 결과가 나타납니다. 행을 선택할 수 있지만 아무 것도 표시되지 않습니다.</P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 221px;"><span class="lia-inline-image-display-wrapper" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 221px;"><img src="https://us.v-cdn.net/6038925/uploads/images/37045iA319787974999980/DiedrichSchmidt_3-1635336043749.png" role="button" title="DiedrichSchmidt_3-1635336043749.png" alt="DiedrichSchmidt_3-1635336043749.png" /></span></SPAN></SPAN></P><P>내가 뭘 잘못하고 있는지 잘 모르겠습니다. Scripting Index에는 List Box() 호출과 Table Box()를 올바르게 사용하는 방법에 대한 예제가 제한되어 있습니다. Fit Model 플랫폼 보고서 창에서 트리 구조를 따라 해 보았지만 작동하지 않습니다.</P><P> </P><P>요약하면 내 스크립트에서 다음을 수정하고 싶습니다.</P><OL><LI>Plot Col Box를 수정하여 PC 보고서(위의 첫 번째 이미지)와 같은 누적 백분율 곡선을 갖습니다. 이것은 항목 2만큼 중요하지 않습니다.</LI><LI>사용자가 추가 분석을 위해 다른 함수로 보내질 목록 상자에서 행을 선택할 수 있도록 테이블 Box() 주변의 목록 상자() 호출을 수정합니다.</LI></OL><P>제안과 도움을 주셔서 감사합니다!,</P><P>DS</P></LINGO-BODY><LINGO-LABS id="lingo-labs-430708" slang="en-US" mode="NONE"><LINGO-LABEL>자동화 및 스크립팅</LINGO-LABEL><LINGO-LABEL>대량 맞춤화</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-431611" slang="en-US" mode="NONE">Re: List Box() 내의 Table Box()에 대한 스크립팅 도움말</LINGO-SUB><LINGO-BODY id="lingo-body-431611" slang="en-US" mode="NONE"><P>다음은 보고서의 테이블에서 데이터를 가져오고 PLS 보고서에서 T2를 가져오는 또 다른 방법입니다.</P>
<P> </P>
<PRE><CODE class=" language-jsl">Names default to here(1);
dt = Open("$Sample_data/Quality Control/Chemical Reactor Process.jmp");
pls = dt << Run Script("Fit PLS (Pro Only)");
//get values for the first column with the name R²Y by searching for display elements that have a
//child header box containing specific values
(pls << XPath("//NumberColBox[NumberColBoxHeader[text()='R²Y']]"))[1] << get as matrix;
//generalize this into a function and then call it for others column headers
getColumn = function({c},(pls << XPath("//NumberColBox[NumberColBoxHeader[text()='" || c || "']]"))[1] << get as matrix);
getColumn("Q²");
getColumn("Y Responses");
//To get T2, you need to send the message to a specific fit within the platform. As Mark mentioned this is tricky because you
//need to send the message to the analysis layer (I've been calling it a scriptable object), but to find the right object you
//navigate the report structure. I like Xpath, so here is how I would get the report (implied with the XPath function),
//navigate to the outline box (picks the first one matching a name), get the scriptable object or analysis layer and then
//send the message to save T2.
firstfit = (((pls << XPath("//OutlineBox[contains(text(),'NIPALS Fit with ')]"))[1]) << Get Scriptable Object) << Save T Square();
firstfit << Save T Square;
//This might better illustrate what is happening
show properties( report(pls)[Outline Box( "Partial Least Squares" )][Outline Box( "NIPALS Fit with 6 Factors Using Fast SVD" )] << get scriptable object );
Re: List Box() 내의 Table Box()에 대한 스크립팅 도움말이 문제는 일반적인 혼동 지점에서 발생합니다. JMP 플랫폼은 분석 계층과 보고서 계층으로 구성됩니다. 분석 계층은 계산을 담당하고 빨간색 삼각형 메뉴에 표시된 명령에 응답합니다. 보고서 계층은 정보 표시를 담당합니다. 보고서 계층은 표시 상자의 중첩 구조입니다. 보고서 레이어가 아닌 분석 레이어로 Save T Square 메시지를 보내야 합니다. 분석 계층에 대한 참조는 플랫폼을 시작할 때 반환되는 참조입니다. 예를 들어,
biv = Current Data Table() << Bivariate( Y( :weight ), X( :height ), Fit Line );
변수 biv는 플랫폼 또는 더 구체적으로는 분석 계층에 대한 참조를 저장합니다. 그런 다음 다른 메시지와 함께 연결된 보고서 계층에 대한 참조를 얻습니다.
bivRep = biv << Report;
이 설명으로 질문이 명확해졌기를 바랍니다.
Re: List Box() 내의 Table Box()에 대한 스크립팅 도움말안녕 @jthi ,
빠른 피드백과 도움에 다시 한 번 감사드립니다. 예, <
이제 내 유일한 문제는 T²를 저장하는 방법입니다. PCA 플랫폼에서 문제의 아웃라인 상자를 처리하려고 할 때마다 표시 상자가 작동해야 하는 <
감사해요!,
DS
Re: List Box() 내의 Table Box()에 대한 스크립팅 도움말항목 1:
이 작업을 수행하는 다른/더 나은 방법이 있다고 생각하지만 << Lower 및 << Upper(Lower를 지정해야 함) 메시지를 찾았습니다. << Lower를 사용하면 누적 열에서 첫 번째 값을 가져온 다음 Plot Col Box with Lower로 설정할 수 있습니다.
pcb << Lower(ncb << get as matrix);

코드를 사용하면 다음과 같이 표시됩니다(참조를 추가하고 사용).
더보기... 값을 얻으려면:
경우에 따라 Make into data table을 사용하는 것으로 충분할 수 있습니다(플랫폼 및 By 변수를 사용하는 경우에 따라 다름).

그런 다음 결과 테이블에서 테이블 스크립트를 확인합니다.


때로는 올바른 디스플레이 상자에 대한 참조를 얻는 매우 빠른 방법을 제공합니다.
Re: List Box() 내의 Table Box()에 대한 스크립팅 도움말안녕 @jthi ,
음, DModX에 대한 부분은 잊어버리세요. 스크립팅 인덱스가 그 방법을 보여줬고 예상대로 작동합니다. Save T Square에 대한 예제가 있지만 작동하지 않습니다. 계속하겠습니다. 올바른 개요 상자를 참조해야 한다고 생각합니다.
감사해요!,
DS
Re: List Box() 내의 Table Box()에 대한 스크립팅 도움말안녕 @jthi ,
빠른 피드백에 감사드립니다. 아까도 해봤지만 아무 일도 일어나지 않아서 다른 루트로 버렸지만 아무데도 이어지지 않았습니다. 나는 돌아가서 시도했고 작동합니다. 감사합니다! 추가된 기능이 유용합니다. 그것은 더 중요한 항목 2를 확실히 해결했습니다. 항목 1을 수정하는 방법에 대한 아이디어가 있다면 훌륭하지만 필수는 아닙니다.
이것은 관련이 있지만 다른 스레드 일 수 있습니다 (알려 주시면 다른 스레드로 다시 게시하겠습니다).
JSL을 사용하여 PCA 플랫폼의 DModX 및 T² 값을 데이터 테이블에 저장하는 방법을 알고 있습니까? 이 모든 것은 이 프로세스를 시도하고 자동화하거나 최소한 다른 여러 단계를 제거하고 DModX 및 T² 공식을 저장하는 데 사용할 PC 수를 결정하기 위한 기본 사항을 사용자에게 제공하는 것입니다.
감사해요!,
DS
Re: List Box() 내의 Table Box()에 대한 스크립팅 도움말List Box()가 특별히 필요합니까? 당신이 사용할 수있는 << 선택 가능한 행 설정(); 테이블 상자에서 행을 선택 가능하게 만든 다음 사용 << 행 변경 설정 function(Function({this}, ); 선택에 기능을 추가합니다.
스크립팅 인덱스의 예:
Names Default To Here(1);
New Window("Mountains",
tb = Table Box(
String Col Box("Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"}),
Number Col Box("Elevation (meters)", {8611, 681, 5895, 4199}),
Plot Col Box("", {8611, 681, 5895, 4199})
)
);
tb << Set Selectable Rows();
tb << set row change function(Function({this}, Print(this << get selected rows)));