カスタム関数での列参照このテーブルがあると:
New Table( "test table",
Add Rows( 9 ),
New Column( "By column",
Character( 1 ),
"Nominal",
Set Selected,
Set Values( {"a", "a", "a", "b", "b", "b", "c", "c", "c"} )
),
New Column( "Categories",
Character( 1 ),
"Nominal",
Set Values( {"t", "t", "r", "y", "t", "r", "r", "r", "r"} )
),
New Column( "N Categories",
Expression,
"None",
Formula(
If( Row() == 1,
Summarize( x = by( :By column, :Categories ) ),
Empty()
);
N Items( Loc( x[1], :By column ) );
),
Set Display Width( 109 )
),
Set Row States( [1, 0, 0, 0, 0, 0, 0, 0, 0] )
)「N カテゴリ」列の数式と同じことを行うカスタム関数を作成したいと考えています。
数式エディターでカスタム関数スクリプトに変換すると、次のようになります。
Add Custom Functions(
{New Custom Function(
"custom",
"N Categories",
Function( {Categories,By column},
{Default Local},
If( Row() == 1,
Summarize( x = by( By column, Categories ) ),
Empty()
);
N Items( Loc( x[1], By column ) );
),
<<DESCRIPTION></DESCRIPTION>しかし、パラメータは、以前は列参照でしたが、行の値を含むパラメータになるだけです。
そこで私の質問は、パラメータを列参照として扱うカスタム関数を作成することは可能ですか?
パラメーターを列名として扱い、代わりに文字列を転送することで機能させることもできますが、同じではありません。
Re: カスタム関数での列参照
@john_madden書きました:ただし、この回避策を期待していない単純なユーザー向けに、列数式で適切に機能するカスタム関数を作成したい場合は、
その上素朴なユーザー、それは Jmp 自体でもあります。利用可能な回避策が失敗する「変換関数」です。
Re: カスタム関数での列参照プランBに関しては、列を参照し、 Jmp サポート TS-00063463 からこの返信を受け取りました

Re: カスタム関数での列参照同じ質問で行き詰まってしまったようです:
カスタム関数 - 列を参照する方法
...同じアプリケーションの場合でも。
一意のカウントに関しては、賞賛を待っているウィッシュ リスト エントリがあります。
新しい JSL 関数: Col N カテゴリ
の問題に関しては、列を参照する、願いがあります - 実際には関連していますが、別の主題があります。
カスタム列の式を一度に評価したり、行間の値をキャッシュしたりするためのオプションまたは関数
...にもかかわらず、最後の文で列の参照に関する問題について言及しています。

Re: カスタム関数での列参照ただ言っておきますが、私がこれまでに思いついた最善の方法は、実際に私が望んでいることではありませんが、列パラメータを Name Expr() 命令で囲むことです。 たとえば、「:Column 1」という名前の列を持つデータ テーブルの場合、次のように動作します。
Names Default To Here( 1 );
dt = Current Data Table();
Add Custom Functions(
New Custom Function(
"x",
"Testf",
Function( {col},
{i},
For Each Row( dt, Print( col ) );
)
)
);
x:Testf(Name Expr(dt:Column 1));しかし、これはできません:
dt = Current Data Table();
Add Custom Functions(
New Custom Function(
"x",
"Testf",
Function( {Name Expr(col)}, // JSL interpreter gives error for this syntax
{i},
For Each Row( dt, Print( col ) );
)
)
);
x:Testf(dt:Column 1); // hypothetical, as the function definition is in errorRe: カスタム関数での列参照私もこの問題に永遠に思えるほど格闘してきたので、この質問をもう一度提起したいと思います。
列参照 (例:Column 1) をパラメータとして受け入れるカスタム関数 (ユーザー関数) を作成する信頼できる方法を持っている人はいますか?
私の回避策は常に、列名を文字列として渡し、関数内で状況に応じて Column() または As Column() を使用して参照を生成することでした。
しかし、この回避策を期待していない素朴なユーザーのために列数式できれいに動作するカスタム関数を作成したい場合は、代わりに列参照または列名を渡すことができれば便利です (そうするように、またはそうであるように思われます) 、ネイティブ関数の場合)。
ジョン
Re: カスタム関数での列参照お返事をありがとうございます。 後で、x をローカルにできないなど、他にもいくつかの問題があることに気付きましたが、これは修正できます。
しかし、関数呼び出しで列参照を渡す方法がわかりませんでした。 少し前に同様の問題があり、列名を文字列として渡すことで解決しました。 以下の例のように機能します。
names default to here(1);
Add Custom Functions(
{New Custom Function(
"NNE",
"N Categories",
Function( {Categories, ByColumn},{Default local},
If( Row() == 1,
Summarize( here:x = by( column(ByColumn), column(Categories) ) );
);
N Items( Loc( here:x[1], column(ByColumn)[row()] ) );
),
<<DESCRIPTION></DESCRIPTION>列式で次のように呼び出すことができます。

ただし、列参照ではなく文字列が必要です。 私の質問を言い換えることができます: N Categories 関数が文字列の代わりに列参照を受け入れるように上記を変更することはどういうわけか可能ですか?
Re: カスタム関数での列参照1.混乱して「カスタム関数の追加()」を探しているコミュニティ メンバーの皆さんのために説明します。これは JMP 14 に追加される機能です。
2. @thomasz , 構築している関数が数式と同じであることは期待できないと思います。あなたの数式は一般的な数式ではなく、関数で実行しようとしているものとは異なり、ハードコードされた数式です。したがって、当然のことながら違いが存在するはずです。 それが一般的な関数である場合、その式はどのようになるかを考えて、そのような式を作成する必要があると思います。私がまとめた同様の一般的な式については、以下を参照してください。
