列方程式で数値オブジェクトを使用する反復関数で増加または減少する数値オブジェクトを列の数式で使用できるようにする必要があります。以下の式では、列の数式でcol、l、mの値を評価する必要があります。どうすればこれを実現できますか?Parse()、Eval()、Num()が機能しません。
For( i = 1, i <=8, i++,
col = 11+i;
l = col - i;
m = col + 1 - i;
colno = Char(col);
New Column("Column "||colno, Character, "Nominal", Formula(If(Row() == 12, Lag(Column(1), l), If(Row() == 13, Lag(Column(2), m), Lag(Column(col, 1)))))));
自動化とスクリプトRe: 列の式で数値オブジェクトを使用するこれは動作するようです。Eval( Eval Expr(....) ) は、列を作成する前に式を評価します。
For( i = 1, i <= 8, i++,
col = 11 + i;
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(
Eval Expr(
New Column( "Column " || Expr( colno ),
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr( l ) ),
If( Row() == 13,
Lag( Column( 2 ), Expr( m ) ),
Lag( Column( Expr( col ), 1 ) )
)
)
)
)
)
);
);
Re: 列の式で数値オブジェクトを使用するColumn( col, 1 )
?

Re: 列の式で数値オブジェクトを使用する新しい列メッセージの外部で定義された変数は、新しい column()メッセージ内で使用しないでください。
私の会社では、コードを実行する前にこのようなプログラミングの問題を検出する自動チェックがあります。
潜在的なエラーが検出された場合は、ユーザーに警告メッセージといくつかの提案が表示されます。
JMP における式処理: Tipps と Trapdoors
For( i = 1, i <= 8, i++,
col = 11 + i;<BR />
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( Column( 2 ), Expr(m) ),
Lag( Expr(Name Expr(As Column( col))), 1 )
)
)
)))
);
);
痛い!列は数字を理解しないので...
Re: 列の式で数値オブジェクトを使用するFor( i = 1, i <= 8, i++,
col = 11 + i;
colname = Column(col) << get name;
l = col - i;
m = col + 1 - i;
colno = Char( col );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( Column( 2 ), Expr(m) ),
Lag( Expr(Name Expr(As Column( colname))), 1 )
)
)
)))
);
);
Re: 列の式で数値オブジェクトを使用するいいキャッチだ。
Re: 列の式で数値オブジェクトを使用する@hogi
mmarchandFSLRのスクリプトを修正したところ(下記参照)、問題なく動作するようになりました。素晴らしい追加機能ですね。懸念点がよく理解できないので、ご説明いただけますか?
dt = Current Data Table();
Delete Symbols();
dt = Current Data Table();
For( i = 1, i <= 8, i++,
c = 11 + i;
l = 12 - i;
m = 13 - i;
colno = Char( c );
Eval(Eval Expr(New Column( "Column " || colno,
Character,
"Nominal",
Formula(
If( Row() == 12,
Lag( As Column( 1 ), Expr(l) ),
If( Row() == 13,
Lag( As Column( 2 ), Expr(m) ),
Lag( As Column( Expr(c)) , 1)
)
)
)))
);
);
Re: 列の式で数値オブジェクトを使用するまず驚いたのは、細部を修正した後でも
Column( col, 1 )
@mmarchandFSLRの解決策は機能しないようです。
Lag() はcolumn() ではなく As Column()を期待しています?!??!
これにより、現在の行の値にアクセスするために使用されている列として()に関する私の「知識」がすべて破壊されます。
Name Expr( As column(col))の代わりにAs Column (col) を使用する場合:
機能しますが、次の点に対しては「脆弱」です:
- 列を追加する (数字は更新されません!)
- 変更されたエントリ (私のシステムでは、数式列のエントリは更新されません?!?)
[再起動後に状況が改善されたら削除します]
Re: 列の式で数値オブジェクトを使用する文書化する価値があるようです:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Column( "height 2", Formula( :height ));
New Column( "height 3", Formula( As Column( "height" ) ));
New Column( "height 4", Formula( As Column( 4 ) ));
New Column( "height 5", Formula( Column( 4 )[Empty()] ));
wait(0);
dt[5::10, "height"] = 1;
wait(0);
New window(<< type("modal dialog"), Text Box ("just height 1 got updated ... continue"));
dt << Move Selected Columns( {:height}, after( :name ) );
New window(<< type("modal dialog"), Text Box ("no big difference - now let's recalc"));
dt << rerun formulas();
ビフォーアフター

- 列式のインタープリターは、Column(4) と As Column (4)、Column("height") などを理解します。
しかし、入力列が変更された場合に列を更新するメカニズムは機能しないのでしょうか? 更新を手動でトリガーする必要があるのでしょうか?
- 列を別の場所に移動すると、数値は更新されません。
列参照では数字を決して使用しません。
列(「高さ」)のようなものは絶対に使用しません
おもしろい事実:
数式エディターもこれを好みません:

Re: 列の式で数値オブジェクトを使用するああ、私の暗い目的を説明すべきだったと思う。背の高いテーブルか幅の広いテーブルか決められないテーブルがある。1列目と2列目、1~8行目は背の高いテーブルで、1~11列目は12行目以降は幅の広いテーブルになる。このスクリプトは、テーブルに何らかの意味を持たせるための第一歩だ。
ビフォーアフター

データを処理するためにさらに一連の手順を実行しますが、ここが難しい部分でした。