カスタム関数を作成し、計算式エディタの関数リストに追加したり、カスタム表示形式、カスタム変換として使用することができます。これらのカスタム関数は、現在のJMPセッションの中でのみ使用できる点に注意してください。JMPを再起動すると、以前定義したカスタム関数は使用できなくなります。セッションごとに定義し、追加しなければなりません。これを簡単に行うには、関数の定義をアドイン、またはJMP起動時に毎回実行される起動スクリプトで行います。
カスタム関数を定義するには、New Custom Function()を使います。関数が定義されたら、Add Custom Functions()を用いて、現在実行されているJMPのインスタンスでその関数を追加、または有効化できます。同様に、Remove Custom Functions()を用いて関数を削除したり、無効にすることもできます。
New Custom Function()は3つのパラメータ(namespace、functionName、functionDefinition)を必要とします。その他のメッセージにより、以下のものを定義できます。
• 計算式エディタの値: 計算式カテゴリ、結果タイプ、パラメータ
• カスタム変換値: 変換カテゴリ
• カスタム形式の値: カスタム形式カテゴリ
• スクリプトの索引の値: 説明、プロトタイプ、スクリプト索引のカテゴリ、例
ヒント: JMPセッションの中で定義されていないカスタム列変換、カスタム関数、またはカスタム表示形式が設定されたデータテーブルを受け取った場合、列に「###」が表示されます。データテーブルの作成者は、あなたのパソコン上でそれらを定義するスクリプトを提供する必要があります。スクリプトを実行した後に、データテーブルをもう一度開いてください。
必要な指定をすべて含んだ関数(スクリプトの索引の情報とヒントのテキストを含む)を作成してみましょう。まず関数を定義した後、それを有効にします。
funcDef = Function( {x, y = 10}, x + y );
description = "この関数は2つの値を加算する。引数が1つだけ指定された場合、2番目の引数のデフォルトは10になる。";
// expr()の中の例には複数のステートメントを指定可能
ex2 = Expr(
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
myNameSpace:Add Ten( :age[4], 20 );
);
parmHint1 = "x value";
parmHint2 = "<y=10>";
/* 変数を用いて関数を定義
コマンドは、新規のカスタム関数の引数として受け入れることも可能 */
newAdd = New Custom Function( "myNamespace", "Add Ten", funcDef );
newAdd << Description( description );
newAdd << Prototype( "myNameSpace:Add Ten(x,<y=10>)" );
newAdd << Example( "myNameSpace:Add Ten(4)" );
// 例は、NameExpr()で渡す
newAdd << Example( Name Expr( ex2 ) );
newAdd << Parameter( "Number", parmHint1 );
newAdd << Parameter( "Number", parmHint2 );
newAdd << Formula Category( "数値の演算" );
// 「myNamespace:Add Ten」関数をシステムに追加
Add Custom Functions( newAdd );
上記の例を実行すると、JMPログに"関数の展開中: myNamespace:Add Ten"と出力されます。「説明」、「プロトタイプ」、「例」の結果を見るために、スクリプトの索引ウィンドウでこの関数を検索してみます。
図9.13 スクリプトの索引のカスタム関数
Formula Categoryメッセージは計算式エディタのカテゴリリストに新しいカテゴリを作成します。カスタム関数は、計算式エディタでは下線付きで表示されます。Parameterメッセージで指定したヒントのテキストも確認できます。
図9.14 計算式エディタのカスタム関数
カスタム関数を削除するには、Remove Custom Functions({"名前"})関数を使用します。
Remove Custom Functions( {"myNamespace:Add Ten"} );