変数を使用した列スイッチャーのスクリプト作成の問題<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは。GUI 表示ボックスから取得した列変数から列スイッチャーをスクリプト化するときに問題が発生しています。ここでの例はグラフ ビルダーを使用したものですが、別のプラットフォームでも試してみましたが、同様の結果が得られました。 列名の取得方法 (obj << get items()) が原因かどうかはわかりません。そのため、添付の JSL にすべてを含めました。グラフ ビルダーはエラーなしで読み込まれ、列 "Y" は Y ロールにあり、その後、"Y" と追加した 2 つのダミー列 "temp" と "temp2" が列スイッチャーにあるはずです。 しかし、Column Switcher() の最初の引数では、そこにテキストを入力するだけのようです。 テキスト「Y」または「:Y」を入力すると正常に動作しますが、「Y」を含む列変数を正しく動作させる方法が見つかりませんでした。 変数を使用するとエラーがスローされます。
これはコードの一部です。サンプル データを開き、自動入力された GUI を生成する ([OK] をクリックするだけです) 簡略化されたスクリプトを添付しました。列名を入力するだけでどのように機能するかがわかりますが、変数を使用した試みは行われません。 何か間違ったことをしているのでしょうか、それともバグなのでしょうか? その場合、回避策はありますか? JMP11.2.0を使用しています。
このスニペットは参考のためにのみ示されていることに注意してください。 実行したい場合は、添付ファイル全体を実行してください。 yParamNames は、プロットするパラメータを含むリストです。「Y」はこのリストの最初の列です。
グラフビルダー(
サイズ(570、559)、
変数( X( 列(dtDataOrig,tempName[1]) )、Y( 列(dtDataOrig,yParamNames[1]) )、オーバーレイ( 列(dtDataOrig, partIdName[1]) ) )、
要素(
Line( X, Y, Legend( 13 )、行順序( 0 )、要約統計量( "Mean" ) )
)、
カラムスイッチャー(
//"Y", // 列名のテキストを入力すると機能します
// 動作しません
//列(dtDataOrig, Y)として、
//列(:Y)として、
//列(Y)として、
//列(Y)、
//列(:Y),
yParamNames[1], // <---- これは機能すると思いますし、最も簡単な実装ですが、変数を受け入れることができません。
yParamNames
)
);
ありがとう、
マイク
Re: 変数を使用した列スイッチャーのスクリプト作成の問題ここで報告されている問題は数年前のものですが、列スイッチャーがその引数を適切に評価するようになったので、お客様はもうこの問題を回避する必要がないことを確認したいと思います。 JMP 13 以降のバージョンでは正しく動作するはずです。
Re: 変数を使用した列スイッチャーのスクリプト作成の問題ありがとうデイビッド、これは完璧に機能します。Eval(Parse(Eval Insert())) 手法を試してみるべきかどうか考えていましたが、最初にグラフ ビルダー オブジェクトを作成した後にそれを使用することは思いつきませんでした。
PMroz さんのご意見にも感謝します... このスクリプトは実際にはあなたのアイデアのようなものでした。前回の Discover Summit で、私は Excel スクリプトの代わりに散布図形式で温度特性データを表示することについて質問しました。そして、あなたは列スイッチャーを備えたグラフ ビルダーを提案しました。 素晴らしく機能します。 ありがとう!
-マイク
Re: 変数を使用した列スイッチャーのスクリプト作成の問題グラフ ビルダー関数から列スイッチャーを取り出し、メッセージを使用して作成してみてください。
gb = グラフビルダー(
サイズ(...)、
変数( ... )、
要素( ... )
);
評価(解析する(評価インサート( 「\[
gb << 列スイッチャー( ^yParamNames[1]^, ^yParamNames^ )
]\" ))) ;
最後の部分の構文を詳しく説明するのは簡単ではありませんが、使用するのは簡単です。Peter が概説したのと同じ原理を使用していますが、文字列を構築するためにエスケープ シーケンスを必要としない構文を使用しています。
この最後のコード部分を構築するために使用するシーケンスを理解するのに役立ちます。次のパターンから始めます。
評価(解析する(評価インサート( 「\[
]\" ))) ;
このパターン内に JSL コードを記述 (またはコピー) します。
gb << 列スイッチャー( yParamNames[1], yParamNames )
動的に評価する必要がある変数があることを示すには、「キャレット」記号で引用します: ^variable^
Re: 変数を使用した列スイッチャーのスクリプト作成の問題これはあなたが念頭に置いていたことですか? これを試してみましたが、やはり同じように動作します。
str = 「グラフビルダー(
サイズ(570、559)、
変数( X( 列(dtDataOrig,tempName[1]) )、Y( 列(dtDataOrig,yParamNames[1]) )、オーバーレイ( 列(dtDataOrig, partIdName[1]) ) )、
要素(
行( X, Y, 凡例( 13 )、行順序( 0 )、要約統計量( \!"平均\!") ))
)、
カラムスイッチャー(
//yParamNames[1],
:Y、
yParamNames
)
);" ;
評価(解析する( str )) ;
Re: 変数を使用した列スイッチャーのスクリプト作成の問題場合によっては、変数が JSL で直接機能しないことがあります。グラフ ビルダー コードを、動作することがわかっている文字列として動的に構築し、eval(parse()) で実行します。
dt =開ける( "$sample_data\big class.jmp" ) ;
str = 「グラフビルダー(
コントロールパネルを表示(0)、
変数( X( :体重 ), Y( :身長 ) )、
要素(
ポイント( X、Y、凡例( 1 )、ジッター( 1 ))、
適合線(
バツ、
Yさん
凡例( 4 )、
適合の信頼度( 1 )、
予測の信頼度( 0 )、
度( \!"線形\!" )、
方程式(0)、
二乗平均平方根誤差( 0 )、
R²( 0 )
)
)
)」 ;
評価(解析する( str )) ;