0

一部のデータテーブル用に JSL スクリプトを作成しており、列に対して機能する関数が必要です。

プロット イベント中に関数を列に作用させることはできますが、標準的な操作ではできません。

動作する例を次に示します。これは現在のデータテーブルに作用し、 の分布をプロットします:Column1。これはたまたま 4 つの一意の項目を持つ公称文字です。

a = Function(
        {col},                 // Function parameters
        {Default Local},       // Local variables
        Distribution(
            Nominal Distribution(
                Column( col ),
                Horizontal Layout( 1 ),
                Vertical( 0 )
            );
        );
    );

dt = Current Data Table();
a(Expr(:Column1));

Expr()周りに注意してください:Column1。これがないと配信機能が動作しません。


私がやろうとしていることは次のとおりですが、うまくいきません。固有のアイテムの数を に表示する必要があります:Column1

a = Function(
        {col},                 // Function parameters
        {Default Local},       // Local variables
        retval = associative array(col);
        Show(nitems(retval));
    );

dt = Current Data Table();
a(Expr(:Column1));

    Returns in Log Window:
    N Items(retval) = 0;        // Should be 4

関数でラップせずにスクリプトを実行すると、問題なく動作します。

retval = associative array(:Column1);
Show(nitems(retval));

    Returns in Log Window:
    N Items(retval) = 4;        // My column happens to have 4 unique entries in it.

私の問題が関数内の名前空間に関係していることはかなり確信していますが、それを理解できないようです。誰か提案はありますか?

4

1 に答える 1

1

これは (私が見た限りでは) スコープ演算子 : in :Column1 の問題にすぎません。

使ってみて

a = Function(
    {col},                 // Function parameters
    {Default Local},       // Local variables
    retval = associative array(col<<Get Values)<<Get Keys;
    Show(nitems(retval));
);

dt = Current Data Table();
a(column(dt, "Column1"));

それは戻った

N Items(retval) = 9; 
于 2014-11-21T19:47:50.823 に答える