こんにちは、みんな、
たとえば、ディストリビューション プラットフォームは、グラフ ビルダーと同じ方法では列参照を受け入れないようです。
Column(dtname,number) 形式を使用してデータテーブル内のさまざまな列を参照するコードがあります。 たとえば、これは GB で実行したコードの一部ですが、問題なく動作します。
Graph Builder(
Size( 500, 350 ),
Show Control Panel( 0 ),
Variables(
X( Column( dt_results, NNxcol ) ),
Y( Column( dt_results, NNYCol + N Items( NNXList ) ) ),
Y( Column( dt_results, NNYCol + 1 + N Items( NNXlist ) ), Position( 1 ) ),
Y( Column( dt_results, NNYCol + 2 + N Items( NNXList ) ) )
),
Elements(
Position( 1, 1 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 8 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 9 ) )
),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 10 ) ), Smoother( X, Y, Legend( 11 ) ) ),
SendToReport(
Dispatch(
{},
"graph title",
TextEditBox,
{Set Text( NNYList[NNYCol] || " Stats vs. " || NNXList[NNxcol] )}
),
Dispatch( {}, "Y title", TextEditBox, {Set Text( NNYList[NNYCol] || " Train & Valid" )} )
)
)
ただし、Distribution プラットフォームで同様のことを実行しようとしても何も起こりません。これは、Continuous Distribution() 呼び出しがこの方法で列を参照することを好まないためだと思います。 列を Column(列名) として参照するのが良いようです。
Distribution(
Continuous Distribution( Column( dt_results, NNYCol + NNcolshift ), Quantiles( 0 ) ),
Continuous Distribution( Column( dt_results, NNYCol + 1 + NNcolshift ), Quantiles( 0 ) ),
Continuous Distribution( Column( dt_results, NNYCol + 2 + NNcolshift ), Quantiles( 0 ) )
)
プラットフォームを呼び出すときに変数を使用したいのは、列名自体をハードコーディングするよりもコードの柔軟性が高いためです。 ディストリビューション プラットフォームの動作が異なる理由、または意図した出力を得るために列を正しく参照する方法について何か考えはありますか?
ご意見/ご感想をお待ちしております。
ありがとう!、
DS
データテーブルにメッセージを送信し、Column() 関数内のテーブル参照を削除するだけです。Graph Builder で動作するスクリプトの構文が気に入らない理由については、わかりません。
dt_results << Distribution(
Continuous Distribution( Column( NNYCol + NNcolshift ), Quantiles( 0 ) ),
Continuous Distribution( Column( NNYCol + 1 + NNcolshift ), Quantiles( 0 ) ),
Continuous Distribution( Column( NNYCol + 2 + NNcolshift ), Quantiles( 0 ) )
)
このような面白くてわかりにくい構文を使用できます
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
dist = dt << Distribution(
Continuous Distribution(Column(Column(dt, col1)), Quantiles(0)),
Continuous Distribution(Column(Column(dt, col2)), Quantiles(0))
);
またはこれ
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
Eval(EvalExpr(
dist = dt << Distribution(
Continuous Distribution(Column(Eval(col1)), Quantiles(0)),
Continuous Distribution(Column(Eval(col2)), Quantiles(0))
);
));
編集: 上記のスクリプトでは Eval(EvalExpr()) は不要です。 さまざまなオプションをテストしているときに(Name Expr(AsColumn()) をいじっていたときに)誤ってそこに残してしまいました。
または、次のいずれか 1 つだけを実行します。
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col1 = "height";
col2 = "weight";
Distribution(Continuous Distribution(Column(Eval(col1))));
colList={col1,col2};
Distribution(column(EvalList(colList)));
詳細については、こちらをご覧ください。
https://www.pega-analytics.co.uk/blog/handling-lists-of-columns/ (ありがとう@レッセル
そしてここ:
https://community.jmp.com/t5/Discussions/Updating-column-list-box-using-list-stored-in-variable-not/mp/687314/highlight/true#M87301
混乱が生じる理由は(よく知られている)カラムの名前として使用されます名前付き引数で継続的な配布。多くの Jmp ユーザーは、それがカラム()機能し、それに応じて使用します。
Col List Box の Data Table() についても同様です。変数に格納されたリストを使用して列リスト ボックスを更新すると、期待どおりに機能しません。 これはそういう意味なのでしょうか?
こんにちは、みんな、
これに関して素早いフィードバックとサポートをしていただきありがとうございます。 私は最終的に以下のブレンドを使いました@mmarchandTSIそして@jthiさんの2番目の提案。 残念ながら、からの提案は、 @mmarchandTSI最終的には単独で動作しませんでしたが、プラットフォームは依然として Column() 参照内の列番号の変数を好みませんでした。 ただし、Column() 参照内の数値変数に対して Eval() を実行すると、問題なく動作しました。 したがって、Column(Eval()) を次のように使用します。 @jthiそして@ほぎ最終的には意図したとおりに動作しました。
素晴らしい提案をありがとう!、
DS