你好,
我需要通过脚本使用列名称和常量的变量创建一个新的公式列。
尝试了 Expr、Eval、Parse、Eval Insert 的各种组合均无济于事。
参见样本。
谢谢
row = 11;
col = "foo";
for (i = 1, i <= ncols(dt), i++,
dt << New Column( "ratio " || char(i), numeric,
formula(( column(col) - column(col)[row] ) / (Col Max(col) - Col Min(col))));
);
使用
for (i = 1, i <= ncols(dt), i++,
当您在 For() 循环中添加新列时,循环将永远不会结束。每次循环 ncols(dt) 都会增加 1,因此 i 永远不会达到 ncols(dt);
New Column() 函数的 Formula() 元素在为列创建时不会解析其内容。它仅在对每行运行公式时解析其内容。因此,当更改这些值时,列和行引用可能会导致问题。处理此问题的正确方法是在创建公式之前将列和行的实际值代入公式中。
Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
row = 11;
col = "height";
stop = n cols(dt);
For( i=1, i<= stop, i++,
Eval(
Substitute(
Expr(
dt << New Column( "ratio " || Char( i ),
numeric,
formula( (As Column( _col_ ) - As Column( _col_ )[_row_]) / (Col Max( As Column( _col_ ) ) - Col Min( As Column( _col_ ) )) )
)
),
Expr( _col_ ), col,
Expr( _row_ ), row
)
);
);