JMP Scripting: Почему данные моего столбца не отправляются в функцию?

Я создаю сценарий 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.

Я вполне уверен, что моя проблема связана с пространством имен внутри функции, но я не могу понять это. У кого-нибудь есть предложения?

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; 
Другие вопросы по тегам