FOR ループと FOR EACH ループの違い誰かがこれの理由を説明できますか:
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
y expr = Expr( Y() );
For( c = 1, c <= N Items( col ), c++,
Insert Into( y expr, col[c] );
);
Name Expr(y expr);期待される出力を生成します
Y( :Runtime, :RunPulse, :RstPulse )
しかしこれは:
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
col = { :Runtime, :RunPulse, :RstPulse };
y expr = Expr( Y() );
For each({coll, index},col,
Insert Into( y expr, coll );
);
Name Expr(y expr);これが生成されます:
Y( ., ., . )
同じ結果が得られると期待できますか? 同じ結果を得るには、FOR EACH ループをどのように変更すればよいでしょうか?
消費者および市場調査結果の共有と伝達Re: FOR ループと FOR EACH ループの違いこれはバグではありません。この例では、実際には JMP の一貫性が保たれています。リストにインデックスを付けると、結果は評価されずに返されます。インデックス付きアイテムの結果を変数に格納すると、その結果が評価されます。覚えておいてくださいFor Each( {値, インデックス}, リスト, 式... )と同等ですFor( インデックス = 1, インデックス <= N Items( リスト ), インデックス++, 値 = リスト[インデックス]; 式... )
A = {1 + 2, 2 + 3, 3 + 4};
b = {};
res = A[1];
Insert Into( b, A[1] );
Insert Into( b, res );
b
/*:
{1 + 2, 3}
Re: FOR ループと FOR EACH ループの違いはい、これです。
1. 行ごとに評価するための For Each Row ステートメントがあり、2. For Each は、リスト (列への参照のリストを操作しようとしています) を For ループと同じように扱う必要があります。
これはバグですか、それとも意図された動作ですか?
Re: FOR ループと FOR EACH ループの違い私の推測では、列は For Each で現在の行の値に評価されると思われます (たとえば、 Row() = 1 を追加することでこれをテストできます)。 Name Expr() を使用することでこれを回避できる場合があります。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Fitness.jmp");
col = {:Runtime, :RunPulse, :RstPulse};
y expr = Expr(Y());
For(c = 1, c <= N Items(col), c++,
Insert Into(y expr, col[c]);
);
Show(Name Expr(y expr));
Row() = 1;
y expr = Expr(Y());
For Each({coll, index}, col,
Insert Into(y expr, coll);
);
Show(Name Expr(y expr));
y expr = Expr(Y());
For Each({coll, index}, col,
Insert Into(y expr, Name Expr(coll));
);
Show(Name Expr(y expr));