カスタム関数を数式で使用できるようにするこんにちは、みんな、
関数を含むスクリプトを登録して列の数式で使用できるようにする方法はありますか?
たとえば、16 進数を等価なバイナリの文字列に変換する関数 hex2binary({str}) を使用してスクリプトを作成し、組み込み関数の 1 つに似た式でこの関数を呼び出せるようにしたいとします。 JSL式、それは可能でしょうか?
ありがとう
レイ
Re: カスタム関数を数式で使用できるようにする<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />すでにそこにいるようですね。 ただし、別の例として、次の場所でアドインをリバース エンジニアリングできます。
https://community.jmp.com/docs/DOC-7528
Re: カスタム関数を数式で使用できるようにするこんにちは Ray3、ジェフ、ミシシッピ州
少し前ですが、実際にこれを行う方法を理解したと思います。
MS が説明した「include」メソッドも試しましたが、機能しますが、信じられないほど遅いです。
ただし、関数を使用してアドインを作成し、それを数式エディターから次のように呼び出すことで、アドイン メソッドを機能させることもできました。
グローバル:myfunc()
具体的には、この関数を作成しました (これは R ベースで、実際には引数の平方根を返すだけですが、ここでは重要ではないと思います:)
myRoot = Function({x},
R初期化();
R 送信 (x);
R 送信("
y <- sqrt(x)
");
a = R Get (y);
R 用語( );
戻り値(a);
);
そして、新しい列に次の数式を追加できます。
グローバル:myRoot(:列 1)
乾杯、
エスベン
カスタム関数を数式で使用できるようにするこんにちは、ジェフさん、MS さん
ヒントをありがとう。両方の提案を試してみました。
Local(Include()) 関数の使用は機能しましたが、数式を計算するたびにインクルードされたファイルを開くため、私のデータ セット (約 20,000 行の長さ) ではかなり遅くなりました。
Jeff の提案も試し、JMPStart.jsl に関数を追加しました。この関数はグローバル シンボル リストに表示され、セッション中に他のスクリプトから問題なく呼び出すことができます。ただし、列数式から関数を呼び出すと、「名前が解決されていません」というエラーが発生します。列式が関数を認識できるようにするために、スコープに関して何か特別なことを行う必要がありますか?
ありがとう!
レイ
カスタム関数を数式で使用できるようにするこんにちは、レイさん
数式エディターの関数ブラウザに関数を表示する方法はありませんが、数式要素をダブルクリックして関数呼び出しを入力することで、ユーザー定義関数を数式で使用できます。
すべての JMP セッションで関数が確実に定義されるようにするには、いくつかのオプションがあります。
1) 関数宣言を JMPStart.JSL ファイルに含めることができます。
2) メニューを持たず、これらの関数を宣言する以外の機能を持たないアドインを作成することもできます。 addinload.jsl ファイルに関数宣言を置くだけです。 そのアドインがインストールされている JMP のコピーであれば、これらの機能を使用できます。
それが役立つことを願っています。
-ジェフ
カスタム関数を数式で使用できるようにする列数式で機能するカスタム関数をグローバルに登録する方法を知りません。 ただし、あまり便利ではないかもしれませんが、保存された jsl ファイルからローカルで関数を呼び出す方法があります。
この関数のみを含むスクリプトを保存したとします。 ファイルの名前は「plus_one」(またはその他の名前)です。
一を足す=関数({バツ} 、バツ+ 1 ) ;
列式内でこの関数を呼び出すには、次のように local() と include() を使用します。
地元(一を足す、
含む( 「パス/plus_one.jsl」 ) ;
一を足す( :カラム) ;
)
ここで、 path は保存された jsl ファイルへのパス、 :Column は式を適用する列です。 Include() はファイル内の JSL コードを解析して評価します (ただし、ファイルは開かれていません)。ローカル コンテキストがないとエラーが発生します。
これは美しくはありませんが、機能するので、関数が非常に複雑で頻繁に再利用される場合には便利です。
実際、すべてのカスタム数式を 1 つのファイルに収集し、起動スクリプトを使用してパス変数を設定できればいいのではないかと思いつきました。 そうすれば、「グローバル」に実装するのが容易になります。 また、ストアド関数の変更はすべてのデータテーブルに変換され、ユーザー定義関数を持つ各列を編集する必要はありません。 私はこのアイデアをテストしていませんが、興味深い見通しです。 ただし、RAM を大量に消費するアプローチになる可能性があります。