사용자에게 열을 선택하도록 요청하는 것은 JMP 스크립트에서 매우 흔한 작업입니다. 스크립트를 작성하기 전에 어떤 방법이 가장 적합한지 결정하는 데 도움이 되는 몇 가지 사항을 고려해야 합니다.
먼저 창의 모양을 어떻게 할지 생각해 보세요. 열 선택 외에도 사용자가 다른 옵션을 지정할 수 있도록 창을 표시해야 할까요? 가장 중요한 것은 창이 어떻게 동작하도록 할지입니다.
모달 창과 비모달 창
모달 창이 열리면 스크립트 실행이 중지되고 사용자의 상호 작용을 기다립니다. 사용자가 모달 창을 닫으면 스크립트의 나머지 부분이 실행됩니다. 모달 창의 예로는 환경 설정 창(파일 > 환경 설정)이 있습니다. JMP는 환경 설정 창이 닫힐 때까지 아무 작업도 수행하지 않습니다.
모달 창이 아닌 일반 창을 사용하면 창이 열린 상태로 유지되어 사용자 상호 작용을 기다리지 않고 스크립트가 완료됩니다. Fit Model 플랫폼 실행 창(분석 > Fit Model)을 예로 들어 보겠습니다. 창을 열어둔 채로 JMP에서 다른 작업을 수행할 수 있습니다. 분석이 생성된 후에도 대화 상자를 열어두는 확인란도 있습니다. 이것이 바로 모달 창이 아닌 일반 창의 예입니다. 사용자가 열과 역할을 다르게 선택할 수 있도록 창이 열린 상태로 유지되는 모달 창이 아닌 일반 창을 사용할 수도 있습니다.
그렇다면 모달 창을 사용할지 아니면 일반 창을 사용할지는 어떻게 결정할까요? 가장 중요한 고려 사항은 JMP가 사용자 입력을 기다릴지 여부입니다. 스크립트의 나머지 부분이 사용자의 선택에 따라 달라진다면 모달 창을 사용하는 것이 좋습니다. 모달 창을 만드는 데에는 두 가지 유용한 방법이 있으므로, 각각의 옵션을 살펴보겠습니다.
컬럼 다이얼로그()
`ColumnDialog()`는 현재 데이터 테이블에서 열을 선택하도록 사용자에게 요청하는 모달 대화 상자를 빠르게 생성할 수 있는 내장 함수입니다. 스크립트 작성자는 대화 상자에 표시할 표시 상자의 유형만 선택할 수 있으며 레이아웃에 대한 제어는 제한적입니다. 다음은 사용자가 X 열 두 개와 Y 열 두 개를 선택하도록 요청하는 예제 스크립트입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
dlg = Column Dialog(
yList = Col List( "Y",
Min Col( 2 ),
Max Col( 2 ),
Data Type( "Numeric" )
),
effectList = Col List( "Effects",
Min Col( 2 ),
Max Col( 3 ),
Data Type( "Numeric" )
)
);
사용자에게 표시되는 창은 다음과 같습니다.

스크립트 작성자는 두 개의 열 목록 표시 상자에 대한 옵션만 제공했음을 유의하십시오. 왼쪽에 있는 현재 데이터 테이블의 열 목록은 내장 기능의 일부로 제공됩니다.
사용자가 선택을 완료하고 확인을 클릭하면 다음과 같이 사용자가 선택한 항목 목록이 표시됩니다.
dlg = {yList = {:Age, :Oxy}, effectList = {:RunPulse, :RstPulse}, Button(1)};
목록에 있는 개별 표현식은 평가되지 않습니다. 따라서 선택한 열을 사용하려면 몇 가지 방법으로 분석에 사용할 열 목록을 불러올 수 있습니다. 예를 들어, dlg 목록 변수에 첨자를 사용하여 열 목록을 새 변수에 할당하거나, 같은 이름을 사용할 수 있습니다.
yList = dlg["yList"];
effectList = dlg["effectList"];
열 목록을 언로드하는 또 다른 방법은 Eval List()를 사용하여 dlg 목록 변수의 항목을 평가하는 것입니다. Button(1)은 평가가 필요하지 않으므로 목록의 다른 항목을 평가하기 전에 dlg 목록의 마지막 항목이 제거됩니다.
Eval List( Remove( dlg, -1 ) )
이제 `Show Symbols ()`를 실행하면 정의된 모든 변수와 열 선택 사항이 `yList` 및 `effectList` 변수에 저장된 것을 확인할 수 있습니다.
// Here
dlg = {yList = {:Age, :Oxy}, effectList = {:RunPulse, :RstPulse}, Button( 1 )};
dt = Data Table( "Fitness" );
effectList = {:RunPulse, :RstPulse};
yList = {:Age, :Oxy};
// 4 Here
어떤 방법을 선택하든 값을 언로드하는 과정에서 yList 및 effectList 변수를 분석에 사용할 수 있습니다.
fm = dt << Fit Model(
Y( Eval( yList ) ),
Effects( Eval( effectList ) ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run
);
그렇다면 Column Dialog()를 사용할 때 가장 중요한 고려 사항은 무엇일까요?
- 현재 데이터 테이블에서 열을 선택할 수 있는 열 선택기가 항상 표시됩니다. 이는 사용자가 열을 선택할 수 있도록 하려는 경우에 편리하지만, 이러한 유형의 모달 창 사용 범위를 제한합니다.
- 직접 작성해야 하는 스크립트 코드의 양은 상당히 적습니다. 내장 기능만으로도 필요한 모든 것을 충족할 수 있을 것입니다. 하지만 사용자 정의 기능은 제한적입니다. 예를 들어, 창 내 표시 상자의 배열을 제어하는 생성자는 HList(), VList(), Line Up Box() 세 가지뿐입니다.
- Column Dialog()에서 반환되는 값은 일관적입니다. 스크립트 작성자는 Column Dialog()가 항상 추출해야 하는 값 목록을 반환한다는 것을 알고 있습니다. 단점은 값을 추출하는 추가 단계가 필요하고 사용자의 선택 항목을 가져오는 방식에 있어 유연성이 떨어진다는 것입니다.
Column Dialog()에 사용할 수 있는 생성자의 전체 목록을 보려면 스크립팅 가이드 의 디스플레이 트리 장에 있는 Column Dialog 생성자 섹션을 참조하십시오.
새 창()
`New Window()`는 모달 또는 비모달 창을 생성할 수 있는 내장 함수입니다. 이 창은 사용자에게 열을 선택하도록 요청하거나 중요한 정보를 표시하는 등 다양한 용도로 사용할 수 있습니다. 다양한 표시 상자를 활용할 수 있으므로 `New Window()`를 사용하여 매우 사용자 정의 가능한 모달 창을 만들 수 있습니다.
사용자 지정 옵션이 늘어남에 따라 작성해야 하는 코드의 양도 증가합니다. 다음 예제는 위에서 보여준 Column Dialog()와 유사한 창을 보여줍니다. 일부 표시 상자의 이름이 비슷한 것을 알 수 있습니다. 예를 들어, V List Box(), H List Box(), Panel Box(), Lineup Box()는 창의 레이아웃을 제어하는 데 사용됩니다. 나머지 표시 상자는 버튼과 열 목록과 같이 창에 표시되는 요소입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
nw = New Window( "Launch Dialog",
<
<MODAL>
V List Box( Align( "right" ),
<STRONG>H List Box</STRONG>(
<STRONG>Panel Box</STRONG>( "Select Columns", clb = Filter Col Selector( dt, all ) ),
<STRONG>Panel Box</STRONG>( "Cast Selected Columns into Fit Model Roles",
<STRONG>Lineup Box</STRONG>( N Col( 2 ), Spacing( 5 ), Button Box( "Y", clbY << Append( clb << Get Selected ) ), clbY = Col List Box( "Numeric", MinItems( 2 ), MaxItems( 2 ), nlines( 3 ) ), Button Box( "Effects", clbEffects << Append( clb << Get Selected ) ), clbEffects = Col List Box( "Numeric", MinItems( 2 ), MaxItems( 3 ), nlines( 4 ) ), Button Box( "Remove", clbY << Remove Selected; clbEffects << Remove Selected; ) ) ) ),
<STRONG>H List Box</STRONG>( Button Box( "OK", yVars = clby << Get Items( "Column Reference" ); eVars = clbEffects << Get Items( "Column Reference" ); ), Button Box( "Cancel" ) ) ) );
</MODAL>
사용자에게 표시되는 창은 다음과 같습니다.

이 예제 창의 스크립트 방식에서는 선택된 열이 확인 버튼의 JSL 변수에 할당됩니다. Y 버튼과 효과 버튼의 스크립트에서도 열을 할당할 수 있다고 생각할 수도 있습니다. 물론 가능하지만, 사용자가 열을 드래그 앤 드롭하여 열 목록 상자에 넣을 수 있기 때문에 해당 버튼들이 실제로 클릭되지 않을 수 있습니다. 따라서 버튼 스크립트는 실행되지 않습니다. 다른 방법은 스크립팅 가이드 의 '표시용 나무 ' 장에 있는 '창에서 값 추출' 부분을 참조하십시오.
`Show (yVars, eVars)`를 실행하면 로그(보기 > 로그)에 값이 나열됩니다.
yVars = {:Age, :Oxy};
eVars = {:RunPulse, :RstPulse};
이러한 변수들은 언로드할 필요 없이 적합 모델 실행에 사용할 수 있습니다.
fm = dt << Fit Model(
Y( Eval( yVars ) ),
Effects( Eval( eVars ) ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run
);
스크립트 코드의 양에 압도되지 마세요. 대신, 이 모달 창(New Window())에서 사용할 수 있는 몇 가지 사용자 지정 옵션을 살펴보겠습니다. 아래 항목들은 위 이미지에 표시된 숫자에 해당합니다.
- New Window() 함수를 사용하면 스크립팅 프로젝트에 적합한 창 제목을 지정할 수 있습니다. 이 예제에서는 간단하게 "대화 상자 시작"이라는 제목을 사용했습니다.
- 그룹 위에 표시되는 텍스트는 사용자 지정할 수 있습니다. 이를 통해 사용자에게 그룹에 대한 간단한 지침이나 설명을 제공할 수 있습니다.
- 선택한 열을 표시하는 Col List Box() 메서드의 선택적 인수로 표시되는 행 수를 지정할 수 있습니다. 이를 통해 표시 상자에 나타나는 열 수를 제어할 수 있습니다. 또한 위 그림과 같이 미적인 목적으로 여백을 추가할 수도 있습니다.
- 열 목록은 현재 테이블뿐만 아니라 열려 있는 모든 데이터 테이블에서 가져올 수 있습니다. New Window() 함수는 다양한 대화 상자 메시지에 사용할 수 있으므로 열 목록을 표시하는 것은 선택 사항입니다.
- 확인 버튼에는 사용자 지정 기능을 추가할 수 있습니다. 또한 취소 버튼은 선택 사항입니다.
New Window() 메서드는 슬라이더, 라디오 버튼, 그림, 그래프 등 여기에서 보여준 것보다 훨씬 더 많은 생성자를 제공합니다! New Window() 메서드에서 사용할 수 있는 생성자 목록은 스크립팅 가이드의 전시용 나무 챕터 에 있는 "새 창용 디스플레이 상자 생성" 부분을 참조하세요.
요약하자면, Column Dialog()는 창을 빠르고 쉽게 생성하는 방법을 제공하지만 사용자 정의 기능은 제한적입니다. 반면, 모달 New Window()는 사용자 정의에 있어 훨씬 더 많은 유연성을 제공하지만 생성하려면 더 많은 고민과 스크립트 작업이 필요합니다. 분명히 두 옵션 모두 상당한 장점을 가지고 있으며, 각자 필요에 따라 각각의 용도를 찾게 될 것입니다. 다행히도, 여러분의 도구 상자에는 두 가지 모두를 위한 공간이 있습니다!