スクリプト内での組み込み 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 ユーザーの要求に応じて完成したソリューションを提供することではありません。私が提供したスクリプトは、問題にアプローチする 1 つの方法の実例として見る必要があります。ユーザーが最終的なソリューションを拡張するための学習ツール。
ここで、最後のエントリの問題に対処します。必要なスクリプトを実行する JMP ユーザーをどのように想像しますか?散布図で使用する列をどのように選択するのでしょうか?
ユーザーが散布図 3D を実行するだけで、希望の点にプロットが到達したら、スクリプトを実行してスクリプトを削除し、列と回転を取得する計画がある場合は、次のような部分があります。散布図ウィンドウを見つけて、最後のエントリからコードを取得して 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 ファイルとして保存されます。
CSV ファイルで R に渡すために必要な形式がわからないため、これは必要なものの単なる推測でした。
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 オートメーションを検討すると、JMP から R を呼び出し、必要な情報を JMP から R に直接渡すことができます。
必要なものをさらに具体的に記載してコミュニティに戻ってください。問題の解決に向けてお手伝いいたします。
最後に、JMP ドキュメント ライブラリの [ヘルプ] プルダウン メニューにある『JMP/JSL スクリプト ガイド』を時間をかけて読むことを強くお勧めします。
Re: スクリプト内での組み込み JMP メニュー関数の呼び出しこれのフォローアップとして、現在開いている散布図を変数に挿入する方法はありますか?