Max()の動作 - JMP 12とJMP 11の違いは?JMP 12では、なぜ以下の機能が動作しなくなったのですか。
たとえば、( "17WW01"、"17WW02"、"17WW03" ... "17WW05")のようなエントリを持つ列 "WW"があります。
そして、私は "WW"コラムで最新の仕事週を見つけたいと思います(両方のJMPバージョンのcharcter / norm):
current_ww = Max(Associative Array(:WW << Get As Matrix()) << Get Keys);
JMP 11.1.1 =>これはうまくいきます。 current_ww = "17WW05"
JMP 12.2.0 =>これはもう動作しません。 current_ww =。
何故ですか?Max()はJMP 12で非常に制限的になりましたか?DJ
再:Max()の動作 - JMP 12対JMP 11とは異なる?これについてのあなたのフィードバックをありがとう。 私たちはこの変更に伴うJSL互換性ノートを発行するべきでした - 問題の一部は変更が多くの数値関数に影響するということです。 将来のリリースでドキュメントを更新する予定です。
関数が文字列に対して実際には正しく機能しなかったことに注意してください。 上記の例を拡張することに注意してください。
lst <SPAN class="token operator">=</SPAN> <SPAN class="token punctuation">{</SPAN><SPAN class="token string">"17WW01"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"17WW02"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"17WW03"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"17WW04"</SPAN><SPAN class="token punctuation">,</SPAN> <SPAN class="token string">"17WW05"</SPAN><SPAN class="token punctuation">}</SPAN><SPAN class="token punctuation">;</SPAN>
Show(Max<SPAN class="token punctuation">(</SPAN>lst<SPAN class="token punctuation">))</SPAN><SPAN class="token punctuation">;<BR />Show(Min(lst));</SPAN>
ふたつの答えは同じです。 JMP 11(およびそれ以前)のバグは、あなたが見ていた結果が引数の評価の副作用だということです。
再:Max()の動作 - JMP 12対JMP 11とは異なる?msgstr "これは意図的に変更されました - Max()はMean()やStd Dev()のような数値関数です。
文字列の場合は、昇順ソートまたは降順ソートを使用できます。例えば:"
しかし、それはそれがJMP12のホバーヘルプのヒントに言っていることではありません。 JMP12でも文字列を最大にすることができます。 それで、そう、それは変わりました、しかしJMP12ドキュメンテーションは変えられませんでした。 このような隠れた変更のために、人々が新しいJMPバージョンに変更することを好まないのはこのためです。 私の場合、私の会社にとって重要なJSLスクリプトがJMP11でうまく機能していたので、JMP12に移行するとクラッシュします。 DJ
再:Max()の動作 - JMP 12対JMP 11とは異なる?そしてもちろん、これは批判的な台本について今日私を悩ませるために戻ってきました。(JMP11からJMP12への移行) 私はこれをJMPに報告するつもりですが、彼らはおそらくそれについて何もしないでしょう。 私の心には間違いなくJMP12のバグがあります。max関数はそれが文字列リストの最大値を見つけることができると述べているので(JMP11ではうまくいくように) DJ
再:Max()の動作 - JMP 12対JMP 11とは異なる?私は別の方法でそれを分解しました:
lst = {"17WW01", "17WW02", "17WW03", "17WW04", "17WW05"};
Max(lst);
これはJMP 11では値を返しますが、12または13では空の値を返します。 回避策は、リストをソートして最後の項目を取得することです。 動作の変更がバグなのか機能なのかわからない。
再:Max()の動作 - JMP 12対JMP 11とは異なる?これは意図的に変更されました - Max()はMean()やStd Dev()のような数値関数です。
文字列の場合は、昇順ソートまたは降順ソートを使用できます。例えば:
current_ww = Sort Descending(Associative Array(:WW << Get As Matrix()) << Get Keys)[1];
再:Max()の動作 - JMP 12対JMP 11とは異なる?私はそれが分解した場所を見るためにそれを分解しました。これはバグだと思います。これが最初の部分です:
aa = Associative Array( :WW << Get As Matrix );
k = aa << Get Keys;
この式は次のように評価されます。
Associative array( 5 elements ) assigned.
{"17WW01", "17WW02", "17WW03", "17WW04", "17WW05"}
最後に、私は有効な表現をしました
max expr = Expr( Maximum() );
For( item = 1, item <= N Items( k ), item++,
Insert Into( max expr, k[item] );
);
Show( Name Expr( max expr ) );
私はこの結果を得ます:
Name Expr(max expr) = Maximum("17WW01", "17WW02", "17WW03", "17WW04", "17WW05");
これは、Maximum関数への有効な呼び出しです。複数の引数がこのように表示され、リストや行列に含まれていない場合、それらはすべて数値またはすべての文字列でなければなりません。この例は明らかに要件を満たしています。しかし、この式を評価すると、この結果が得られます。
need arguments to be scalars, matrices, or lists in access or evaluation of 'Maximum' , Maximum/*###*/("17WW01", "17WW02", "17WW03", "17WW04", "17WW05")
元のキーのリストを使おうとすると:
Name Expr(max expr) = Maximum({"17WW01", "17WW02", "17WW03", "17WW04", "17WW05"});
エラーメッセージが出ません。元の記事のレポートとして欠損値のみが表示されます。
バグのように見えます。
再:Max()の動作 - JMP 12対JMP 11とは異なる?どうやらそれは変わった。 JMP 12とJMP 13のどちらもJMP 11と同じ結果を返しません。