JMPスクリプティングのヒントとコツをすぐに紹介しました。 JMPスクリプターズクラブQ2 。 これがテキスト形式の同じヒントです(そしてもう少し)。 私の技術的な説明は正しくないかもしれませんし、私は完全に理解することを気にしないので、あちこちで間違った用語を使うかもしれませんすべての(ほとんどの場合)JMPとJSLで何が起こっているのか、私は自分のコードがうまくそして速く動作することを望んでいます。
ヒント1JMPスクリプトエディタの埋め込みログを有効にする
埋め込みログを有効にすると、JMPのスクリプトエディタでJMPログをすばやく簡単に確認できます。 スクリプトエディタのJMP設定から埋め込みログを有効にできます。 JMP16では、埋め込みログの高さを変更することもできます(私は個人的に25%〜30%の値を使用します)。

たぶん役立つリンク
JMPへのテキストログイン(jmp.comヘルプ)
ヒント2JMP16+の場合、拡張ログを有効にします
JMP16では、拡張ログと呼ばれる新機能がリリースされました。 これにより、JMPでインタラクティブに行ったことを追跡し、それらのアクションにスクリプトを提供して、JMPにスクリプトを簡単に記述させることができます。
拡張ログは、JMPの設定から有効にできます。 キャプチャされる内容と拡張ログの外観を変更することもできます。

たぶん役立つリンク
強化されたログおよびアクションレコーダー-JMP16およびJMPPro16の新機能
JMP 16の拡張ログ:これによりすべてが変更されます
JMPでの拡張ログイン(jmp.com)
ヒント3変数から式への値の評価
これは、JMPコミュニティではかなり一般的なトピックです。たとえば、変数の値が数式に評価されない理由です。 これは基本的に、値が式(変数)の「外」で評価されなかったことを意味します。 以下は、問題と考えられる解決策を示す例です(私の推奨するメソッドは、Eval(EvalExpr())+ Expr()です)。
例1式
この例では、2つの列が作成されています。1つはEval(EvalExpr())がない場合とある場合です。 ないものは式に変数名が残ります
もっと見る...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
power = 3;
new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^power));
Show(new_col << Get Formula);
power = 4;
Eval(EvalExpr(new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^Expr(power)))));
Show(new_col << Get Formula);
データテーブルと数式(数式がどのように表示されるか、xから3の値に何が起こったかに注意してください(現在は4になります))

このデータテーブルを保存し、再度開いて新しい行を追加すると、データテーブルは電力の値を認識していないため、次のエラーメッセージが表示されます。

これは、Names Default To Here(1)を使用しているためです。サンプルスクリプトでは、エラーはこの場合は良いことです。 Names Default To Here(1);を使用していなかった場合。スクリプトを開始します(を参照)追加のヒント)、power変数をグローバル名前空間に追加すると、データテーブルは同じJMPセッションのpower値を認識します。 これで、データテーブルが想定どおりに機能するようになり、テーブルを共有します。共有した相手は、なぜ機能しないのか疑問に思うでしょう。
例2仕様制限の設定
このサンプルスクリプトは、Eval(EvalExpr())を使用して値を列のプロパティ(この場合はSpec Limits)に取得する方法を示しています。
もっと見る...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y3", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
Column(dt, "y1") << Set Property(
"Spec Limits",
{LSL(-1), USL(1), Show Limits(1)}
);
lower_limit = 0.5;
upper_limit = 1.5;
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(lower_limit), USL(upper_limit), Show Limits(1)}
);
Eval(
EvalExpr(
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(Expr(lower_limit)), USL(Expr(upper_limit)), Show Limits(1)}
);
)
);
例3<<閉じるとき
最後の例として、誤って参照を上書きしないようにスクリプトを保護する方法を示します。 私はこれについて簡単に話しました2022_Q1 MakeOverChallenge:さまざまな方法でのマウスクリックに対するアクションチャレンジB
このスクリプトを実行して2変量ウィンドウを閉じると、BigClassではなくSemiconductorCapabilityテーブルが閉じられていることがわかります。 これは、2変量ウィンドウが閉じているときに、dtがすでにSemiconductor Capabilityを参照しているためです(たとえば、dt_semiなどの別の変数名を使用している可能性もあります)。
もっと見る...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
biv << On Close(
close(dt, no save)
);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
そして、このコードを実行すると、正しいテーブルが閉じられます。 これは、BigClassテーブルへの<
もっと見る...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
Eval(EvalExpr(
biv << On Close(
Close(Expr(biv << Get Data Table), no save)
);
));
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
たぶん役立つリンク
Eval Insert、Eval Expr、Parse、およびSubstituteを使用して、ある式を別の式に挿入します
式処理関数:パートI-Expr()、NameExpr()、Eval()、..の解明 難問
式(JMPヘルプ、jmp.com)
式関数(JMPヘルプ、jmp.com)
追加のヒントデフォルトの名前でスクリプトを開始します(1);
これにより、名前空間がグローバル変数で汚染されるのを防ぎ、将来の問題を回避できます。これは、カスタム名前空間を使用する場合でも、新しいスクリプトファイルを開始するときに常に行うことです。 これは、グローバル名前空間で偶然に変数を作成することさえ避けるためです。
たぶん役立つリンク
高度なスコープと名前空間(JMPヘルプ、jmp.com) (非常によく読んでください、それは複数のページを持っています、それらのほとんどをチェックすることを忘れないでください!)
名前を解決するためのルール(JMPヘルプ、jmp.com)
効率と再現性のための基本的なスクリプティング:より少ないことでより多くのことを行う(2019-US-TUT-290)
に関して
Names default to here (1);
私はまた何人かの人々が使用するのを見ました
Clear globals (1);
さらに、スクリプトの先頭にあります。
なぜそれが役立つのか理解できると思いますが、それについてどう思いますか?
@Ressel 、個人的には、実行中の他のスクリプトに干渉する可能性があるため、Clear Globals(1)は避けたいと思います。 スクリプト変数をローカルまたは独自の名前空間にスコープする方がはるかに安全です。
やあ@Ressel 、
私は同意します@DonMcCormack 、グローバル変数をクリアしない方が良いです。 これを望まない理由の1つの例は、スクリプトに「リコール」機能がある場合です。この機能では、「リコール」ボタンをクリックしてから、ロールまたは値にキャストした変数または列をクリックできます。 JMPプラットフォームで使用するために入力したものは自動的に置き換えられるため、戻って手動で行う必要はありません。 スクリプトの開始時にclearglobals(1)がある場合、スクリプトを実行するたびに、リコール変数がメモリからクリアされ、リコール関数が事実上役に立たなくなります。
DS