すべての表示ツリー要素を検索<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、
スクリプト作成のために、JSL を使用して表示ツリー内のすべてのオブジェクトのリストを取得したいと考えています。具体的には、ウィンドウ内のすべての FrameBox のリストを取得し、それぞれにグラフィックス スクリプトを追加したいと考えています。あるいは、利用可能な FrameBox のリストをユーザーに返し、追加するグラフィックス スクリプトをユーザーに選択してもらいたいと考えています。
ウィンドウ内のすべての FrameBox のリストを取得するにはどうすればよいですか?表示ツリーを表示するだけでなく、スクリプト作成に適した形式のリストを取得したいと考えています。これは可能でしょうか?
ありがとう!
Re: すべての表示ツリー要素を検索JMP のどのバージョンを使用していますか?
Windows ボックスまたは Mac で実行していますか?
ログをクリアしてスクリプトを再実行し、次の応答にログ出力全体を含めていただけますか?
Re: すべての表示ツリー要素を検索このスクリプトを実行しようとしていますが、次のエラー メッセージが表示されます。
Send Expects Scriptable Object{1} は、 'Send' のアクセスまたは評価で、ノード << /*###*/className/*###*/
理由や何をすべきか何か考えはありますか?
ありがとう、
トヴァ
Re: すべての表示ツリー要素を検索このスクリプトを実行しようとしていますが、次のエラー メッセージが表示されます。
Send Expects Scriptable Object{1} は、 'Send' のアクセスまたは評価で、ノード << /*###*/className/*###*/
理由や何をすべきか何か考えはありますか?
ありがとう
Re: すべての表示ツリー要素を検索こんにちは、MSさん
問題は、「parent << getTitle」が JMP10 のグラフ ビルダーの結果を生成しないことのようです。
私のチームはこれなしで JMP10 に参加する予定です。ご協力いただきありがとうございます!
Re: すべての表示ツリー要素を検索私は JMP 10 ライセンスを持っていないので、お役に立てないかもしれません。 何が間違っているのでしょうか? ログにメッセージはありますか?
Graph Builder は、JMP の新しいバージョンごとに大きく進化してきました。 Graph Builder のスクリプト サポートも改善されたと思います。 おそらく、v.10 グラフ ビルダー レポートには (まだ) "スクリプト可能" ではない特殊な表示ボックス タイプがあり、検索が完了する前に while ループが停止する原因になっている可能性があります。
使ってみることもできます入れる()の代わりに項目()を挿入します。
Re: すべての表示ツリー要素を検索こんにちはMS 、
スクリプトをありがとうございます。 JMP12 では見事に動作します。現在、スクリプトを JMP10 まで互換性を持たせようとしていますが、GraphBuilder のスクリプトのデバッグで問題が発生しています。スクリプトを機能させる方法を知っていますかJMP10のグラフビルダー?
dt =開ける( "$SAMPLE_DATA/Big Class.jmp" ) ;
// スクリプトはgraph1に対して機能します。
グラフ1 = dt <<フィットモデル(
Y ( :身長) 、
効果( :セックス) 、
人格( 「標準最小二乗法」 ) 、
強調( 「効果レバレッジ」 ) 、
走る(
:身長<< {運動不足( 0 ) 、実際の値と予測値をプロットする( 1 ) 、
ボックス コックス Y 変換( 1 ) 、予測による残差のプロット( 1 ) 、
プロット効果の活用( 1 )}
)
) ;
// グラフ 2 ではスクリプトがクラッシュします。
/*
グラフ 2 = dt << グラフ ビルダー(
コントロールパネルを表示(0)、
変数( X( :身長 )、Y( :体重 )、ラップ( :年齢 ) )、
要素( ポイント( X, Y, 凡例( 1 ) ) )
);
*/
待って( 1 ) ;
勝つ=現在のウィンドウ() ;
// 表示された FrameBox 番号とタイトルをリンクする連想配列
FBタイトル= [ => 】 ;
私= 1 ;
その間(スクリプト可能です(試す(親=勝つ[フレームボックス(私)] <<親) ) 、
その間(親の種類=シャア(親<<クラス名) != 「アウトラインボックス」 、
親=親<<親
) ;
FBタイトル<<項目を挿入(私、親<<タイトルを取得する) ;
私++;
) ;
見せる( FBタイトル) ;
// ウィンドウを選択します。
勝つ<<ウィンドウを前面に移動;
のために(私= 1 、私<= N 個のアイテム( FBタイトル) 、私++、
勝つ[フレームボックス(私)] <<選択する;
新しい窓( 「フレームボックスのタイトル」 、 <<モーダル、テキストボックス(評価( FBタイトル[私] ) ) ) ;
勝つ[フレームボックス(私)] <<選択を解除します;
) ;
Re: すべての表示ツリー要素を検索ありがとうMSさん。
このフォローアップの質問に対する別のディスカッションに返信を投稿すると、非表示または表示されているフレームボックスを検索する, 正解とさせていただきます。
非常に印象的。
Re: すべての表示ツリー要素を検索Ian が組み込んだ他の機能がすべて必要ない場合は、これでうまくいきました。なぜリストのリストが返されるのかわかりませんが、最初のリストを選択するだけです。
dt =開ける( "$SAMPLE_DATA/Big Class.jmp" ) ;
ビブ= (dt <<二変量(Y( :身長、 :重さ) 、バツ( :年))) ;
フレームリスト=ビブ<< xpath ( 「//フレームボックス」 ) ;
待って( 2 ) ;
フレームリスト[ 1 ][ 1 】 <<選択;
待って( 2 ) ;
フレームリスト[ 2 ][ 1 】 <<選択;
Re: すべての表示ツリー要素を検索興味深い議論。 以下の例は、上の例から大きく借用したもので、連想配列を使用して現在の数フレームボックスとそのタイトルが表示されました。
dt =開ける( "$SAMPLE_DATA/Big Class.jmp" ) ;
オブジェクト= dt <<フィットモデル(
Y ( :身長) 、
効果( :セックス) 、
人格( 「標準最小二乗法」 ) 、
強調( 「効果レバレッジ」 ) 、
走る(
:身長<< {運動不足( 0 ) 、実際の値と予測値をプロットする( 1 ) 、ボックス コックス Y 変換( 1 ) 、予測による残差のプロット( 1 ) 、
プロット効果の活用( 1 )}
)
) ;
報告=報告(オブジェクト) ;
// 表示されたフレームボックス番号とタイトルをリンクする連想配列
FBタイトル= [ => ] ;
私= 1 ;
その間(スクリプト可能です(試す(親=報告[フレームボックス(私)] <<親)) 、
その間(親の種類=シャア(親<<クラス名) != 「アウトラインボックス」 、親=親<<親) ;
FBタイトル<<項目を挿入(私、親<<タイトルを取得する) ;
私++;
) ;
見せる( FBタイトル) ;
// ウィンドウを選択します。
オブジェクト<<ウィンドウを前面に移動;
のために(私= 1 、私<= N 個のアイテム( FBタイトル) 、私++、
報告[フレームボックス(私)] <<選択する;
勝つ=新しい窓( 「フレームボックスのタイトル」 、 <<モーダル、テキストボックス(評価( FBタイトル[私]))) ;
報告[フレームボックス(私)] <<選択を解除します;
) ;
Re: すべての表示ツリー要素を検索わかった。ありがとうイアン。返された非表示の FrameBox の残念な副作用は、以下に示すように、FrameBox タイトルが FrameBox 番号と一致しない可能性があることです。Try() 関数の他のバリエーションを使用すると、スクリプトを動作させることができるかもしれません。
デフォルトの名前はここにあります( 1 ) ;
ログをクリアする() ;
// この関数は表示ツリーを再帰的に走査し、
// を構成する表示ボックスの名前の事前注文リスト
// ツリー。 また、各 FrameBox (表示されているかどうかに関係なく) も検索します。
// 親のOutlineBoxの名前を取得します
予約注文=関数( {ノード} 、
地元( { chノード} 、
// 現在のノードを検査します
ノードタイプ=シャア(ノード<<クラス名) ;
印刷する( 「ノード:」 ||ノードタイプ) ;
もし(ノードタイプ== 「フレームボックス」 、
// この FrameBox の親アウトライン ノードのタイトルを検索します
親=ノード<<親;
親の種類=シャア(親<<クラス名) ;
その間(親の種類!= 「アウトラインボックス」 、
親=親<<親;
親の種類=シャア(親<<クラス名) ;
) ;
に挿入( FBタイトル、親<<タイトルを取得する) ;
) ;
// 再帰を実行します
chノード=ノード<<子供;
その間(スクリプト可能です( chノード) 、
再帰( chノード) ;
chノード= chノード<<兄弟;
) ;
)
) ;
// 'preorder' を試してください。 。 。
dt =開ける( "$SAMPLE_DATA/Big Class.jmp" ) ;
オブジェクト= dt <<フィットモデル(
Y ( :身長) 、
効果( :セックス) 、
人格( 「標準最小二乗法」 ) 、
強調( 「効果レバレッジ」 ) 、
走る(
:身長<< {運動不足( 0 ) 、実際の値と予測値をプロットする( 1 ) 、回帰プロット( 0 ) 、予測による残差のプロット( 1 ) 、プロット効果の活用( 1 )
}
)
) ;
報告=報告(オブジェクト) ;
FBタイトル= {} ;
予約注文(報告) ;
印刷する( 「\!n」 、 FBタイトル) ;
// ウィンドウを選択します。
待って( 1 ) ;
オブジェクト<<ウィンドウを前面に移動;
のために(私= 1 、私<= N 個のアイテム( FBタイトル) 、私++、
試す(
報告[フレームボックス(私)] <<選択する;
勝つ=新しい窓( 「フレームボックスのタイトル」 、 <<モーダル、テキストボックス(評価( FBタイトル[私】 ) ) ) ;
報告[フレームボックス(私)] <<選択を解除します;
)
) ;
Re: すべての表示ツリー要素を検索あなたの質問に直接答えることはできませんが、「Try()」関数を使用すると、あなたが言及した失敗を無害にすることができるかもしれません。
Re: すべての表示ツリー要素を検索こんにちはイアン@JMP 、
改めて、ありがとうございました予約注文機能。実際に表示されている FrameBox のみを関数が返す方法はありますか?それとも、どの FrameBox が表示されているかどうかを JMP が判断する方法はありますか?
スクリプトが表示されていない FrameBox にコマンドを送信しようとすると、エラーが発生することがわかりました。
Re: すべての表示ツリー要素を検索ありがとうイアン。
Re: すべての表示ツリー要素を検索それは十分に可能です。 以下のコードは、プリオーダー トラバーサルを使用して表示ツリーを移動します (これは元々、JMP 部門の Joseph Morgan によって書かれたものだと思います)。 (コードの残りの部分に応じて) いくつかの調整を行うだけで、必要なものが得られるはずです。
名前デフォルトここへ( 1 ) ;
ログのクリア() ;
// この関数は表示ツリーを再帰的に走査し、
// を構成する表示ボックスの名前の事前注文リスト
// ツリー。 また、各 FrameBox (表示されているかどうかに関係なく) も検索します。
// 親のOutlineBoxの名前を取得します
予約注文=関数({ノード} 、
地元({ chノード} 、
// 現在のノードを検査します
ノードタイプ=シャア(ノード<<クラス名) ;
印刷する( 「ノード:」 ||ノードタイプ) ;
もし(ノードタイプ== 「フレームボックス」 、
// この FrameBox の親アウトライン ノードのタイトルを検索します
親=ノード<<親;
親の種類=シャア(親<<クラス名) ;
その間(親の種類!= 「アウトラインボックス」 、
親=親<<親;
親の種類=シャア(親<<クラス名) ;
) ;
挿入する( FBタイトル、親<<タイトルを取得する)
) ;
// 再帰を実行します
chノード=ノード<<子供;
その間(スクリプト可能( chノード) 、
再帰( chノード) ;
chノード= chノード<<兄弟;
) ;
) ;
) ;
// 'preorder' を試してください。 。 。
dt =開ける( "$SAMPLE_DATA/Big Class.jmp" ) ;
オブジェクト= dt <<フィットモデル(
Y ( :身長) 、
効果( :セックス) 、
人格( 「標準最小二乗法」 ) 、
強調( 「効果レバレッジ」 ) 、
走る(
:身長<< {運動不足( 0 ) 、実際の値と予測値をプロットする( 1 ) 、
回帰プロット( 0 ) 、予測による残差のプロット( 1 ) 、
プロット効果の活用( 1 )}
)
) ;
報告=報告(オブジェクト) ;
FBタイトル= {} ;
予約注文(報告) ;
印刷する( 「\!n」 、 FBタイトル) ;