스크립트 내에서 내장 JMP 메뉴 기능 호출안녕하세요 여러분,
경험이 부족한 JSL 스크립터입니다. 이것이 사소한 질문이라면 사과드립니다. 그러나 내부에서 특정 회전 각도(산점도 3D를 수동으로 수행하여 생성된 3D 그래프의 사용자 회전에 의해 미리 결정됨)에 대한 산점도 3D 명령을 변수에 삽입할 수 있는 방법이 있는지 궁금합니다. JSL 스크립트. 예를 들어,
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
, 그러나 이미 생성된 산점도에서 회전 값을 입력해야 하는 프로세스를 자동화하려고 하기 때문에 회전 값을 코드에 수동으로 복사하여 붙여넣지 않고도 이 작업을 수행할 수 있다는 아이디어가 있습니다. 최종 목표는 미리 결정된 회전 값을 입력으로 사용하고 R 스크립트(이미 작성된)와 인터페이스하여 3D 산점도에서 2D 플롯을 생성하는 스크립트를 갖는 것입니다. 이를 통해 Mac 클립보드 작업의 불편함을 피할 수 있습니다. .
도움을 주시면 감사하겠습니다.
자동화 및 스크립팅품질 및 프로세스 엔지니어링Re: 스크립트 내에서 내장 JMP 메뉴 기능 호출기대 불일치가 있는 것 같아요.JMP 커뮤니티 토론 그룹의 목적은 JMP 사용자의 요청에 따라 완성된 솔루션을 제공하는 것이 아닙니다.내가 제공한 스크립트는 문제에 접근하는 한 가지 방법을 보여주는 예시로 간주되어야 합니다.사용자가 최종 솔루션을 확장할 수 있는 학습 도구입니다.
이제 마지막 항목의 문제를 해결하기 위해 JMP 사용자가 원하는 스크립트를 어떻게 실행할 것으로 예상하십니까?산점도에 사용할 열을 어떻게 선택합니까?
계획이 사용자가 산점도 3D를 실행한 다음 원하는 지점에 플롯을 가져온 다음 스크립트를 실행하여 스크립트를 제거하고 열과 회전을 가져오도록 하는 것이라면 다음과 같습니다. Scatterplot 창을 찾은 다음 마지막 항목에서 코드를 가져와 csv 파일을 만드는 JSL
Names Default To Here( 1 );
// Find the current report
curReport = Current Report();
// Check to see if the JMP current report is actually the Scatterplot 3D report
If( curReport[Outline Box( 1 )] << get title == "Scatterplot 3D",
theScript = Char( (xx[Outline Box( 1 )] << get scriptable object) << get script );
dt = Current Data Table();
,
// If not, find the window that is the 3D plot
i = 1;
While( Try( Window( i )[Outline Box( 1 )] << get title, "" ) != "Scatterplot 3D" & i < 100, i++ );
If( i < 100,
curReport = Window( i )[Outline Box( 1 )];
theScript = Char( (curReport[Outline Box( 1 )] << get scriptable object) << get script );
dt = Data Table( Trim( Word( 1, Window( i ) << get window title, "-" ) ) );
,
// If no Scatterplot 3D is jound, display an error
Dialog( "Error: No Scatterplot 3D was found" );
Throw();
);
);
// If the code makes it to here, strip off the script components needed
varsList = {};
Insert Into( varsList, Word( 2, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 4, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 6, Substr( theScript, Contains( theScript, "Y(" ) ), ":,)" ) );
rotationList = {};
Insert Into( rotationList, Word( 2, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 3, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 4, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
// Add the columns used and the rotations to a new data table
dtSub = dt << subset( columns( Eval( varsList ) ), selected rows( 0 ) );
dtSub << New Column( "_Vars_", character, set values( varsList ) );
dtSub << New Column( "_Rotation_", character, set values( rotationList ) );
dtSub << Save( "$TEMP/passvalues.csv" );
Close( dtSub, nosave );
Re: 스크립트 내에서 내장 JMP 메뉴 기능 호출도움이 되는 조언에 감사드립니다. 이것을 내 솔루션에 통합하려고 시도합니다. 이것은 의미가 있습니다. 이 JSL에 대한 유일한 관심사는 각 새 데이터 세트에 대해 스크립트를 실행하려는 각 새 데이터 세트에 대해 3개의 새 열 이름( :age 등...)을 수동으로 입력해야 한다는 것입니다. 제 경우에는 이 프로세스를 자동화하려는 목적을 상실하게 됩니다.Re: 스크립트 내에서 내장 JMP 메뉴 기능 호출이 토론 질문은 이전 토론과 관련이 있거나 동일한 질문인 것 같습니다. 3D 산점도 플롯 스크립트에서 회전 및 데이터 열 선택
이 게시물의 특정 질문에 답하려면 스크립트
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
실행 시 객체를 가리키는 변수를 생성하여 JSL에서 액세스할 수 있는 출력 표시 객체를 생성합니다.
spr = report( sp );
//or
spr = sp << report;
"spr"은 산점도를 포함하지 않지만 산점도 및 출력 표시와 관련된 다양한 개체를 포함하는 출력 표시 트리 내의 최상위 개체에 대한 포인터입니다.
아래는 위에 언급된 토론 질문에 대해 제가 작성한 스크립트입니다.이를 통해 사용자는 산점도 3D를 실행할 수 있으며, 산점도가 닫히면 표시 트리로 이동하여 실행 시 산점도 3D를 예전과 마찬가지로 재생성하는 JMP 스크립트를 추출합니다. 폐쇄되었습니다.그런 다음 스크립트는 계속해서 3개의 축과 회전 값에 대한 열을 각각 varsList 및 RotationList라는 2개의 JMP 목록으로 추출합니다.여기에서 해당 값을 원래 JMP 데이터 테이블에 새 열로 다시 추가한 다음 데이터 테이블을 csv 파일로 저장합니다.
R에 전달하기 위해 csv 파일에 필요한 형식이 무엇인지 모르면 이는 필요한 것이 무엇인지 추측한 것뿐입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\big class.jmp" );
sp = Scatterplot 3D(
Y( :age, :height, :weight ),
Frame3D( Set Grab Handles( 0 ), Set Rotation( -54, 0, 38 ) )
);
sp << on close(
theScript = Char( (Report( sp ) << get scriptable object) << get script );
varsList = {};
Insert Into( varsList, Word( 2, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 4, Substr( theScript, Contains( theScript, "Y(" ) ), ":," ) );
Insert Into( varsList, Word( 6, Substr( theScript, Contains( theScript, "Y(" ) ), ":,)" ) );
rotationList = {};
Insert Into( rotationList, Word( 2, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 3, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
Insert Into( rotationList, Word( 4, Substr( theScript, Contains( theScript, "Rotation(" ) ), "()," ) );
dtSub = dt << subset( columns( Eval( varsList ) ), selected rows( 0 ) );
dtSub << New Column( "_Vars_", character, set values( varsList ) );
dtSub << New Column( "_Rotation_", character, set values( rotationList ) );
dtSub << Save( "$TEMP/passvalues.csv" );
close( dtSub, nosave );
);
// This line opens the csv back into JMP
//open("$TEMP/passvalues.csv");
JMP 작동 방식에 대해 참고하면 산점도를 변수에 배치한 다음 이를 R에 전달하거나 .csv 파일로 저장할 수 없습니다.그러나 이미지를 이미지 파일에 저장할 때 산점도의 이미지를 추출하거나 이미지를 Blob으로 전달할 수 있습니다.나는 당신이 무엇을 찾고 있는지 정확히 모르겠습니다.JMP에서 R을 호출하고 필요한 정보를 JMP에서 R로 직접 전달할 수 있는 JMP 자동화를 살펴보는 것이 좋습니다.
귀하에게 필요한 것이 무엇인지 더 구체적으로 설명하여 커뮤니티에 다시 방문해 주시면 문제 해결에 도움을 드릴 수 있도록 노력하겠습니다.
마지막으로, JMP 문서 라이브러리의 도움말 풀다운 메뉴에 있는 JMP/JSL용 스크립팅 가이드를 시간을 내어 읽어 보시기 바랍니다.
Re: 스크립트 내에서 내장 JMP 메뉴 기능 호출이에 대한 후속 조치로 현재 열려 있는 산점도를 변수에 삽입하는 방법이 있습니까?