Unterschied zwischen FOR- und FOR EACH-SchleifenKann jemand erklären, warum das so ist:
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);erzeugt die erwartete Ausgabe
Y( :Runtime, :RunPulse, :RstPulse )
aber dieses:
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);erzeugt das:
Y( ., ., . )
Ich würde erwarten, dass es das gleiche Ergebnis liefert? Wie muss ich die FOR EACH-Schleife ändern, um das gleiche Ergebnis zu erzielen?
Verbraucher- und MarktforschungErgebnisse teilen und kommunizierenBetreff: Unterschied zwischen FOR- und FOR EACH-SchleifenEs handelt sich nicht um einen Fehler – in diesem Fall liegt es tatsächlich daran, dass JMP konsistent ist.Bei der Indizierung einer Liste wird das Ergebnis unbewertet zurückgegeben.Beim Speichern des Ergebnisses eines indizierten Elements in einer Variablen wird das Ergebnis anschließend ausgewertet.Erinnere dich daran Für jeden( {Wert, Index}, Liste, Ausdruck... ) ist äquivalent zu For( index = 1, index <= N Items( list ), index++, value = list[index]; expression... )
A = {1 + 2, 2 + 3, 3 + 4};
b = {};
res = A[1];
Insert Into( b, A[1] );
Insert Into( b, res );
b
/*:
{1 + 2, 3}
Betreff: Unterschied zwischen FOR- und FOR EACH-SchleifenJa, das ist es.
Es ist ein seltsames Verhalten, da 1. wir eine For Each Row-Anweisung für die zeilenweise Auswertung haben und 2. For Each sollte eine Liste (und ich versuche, mit einer Liste von Verweisen auf Spalten zu arbeiten) genauso behandeln wie eine For-Schleife.
Ist das ein Fehler oder handelt es sich um beabsichtigtes Verhalten?
Betreff: Unterschied zwischen FOR- und FOR EACH-SchleifenIch vermute, dass die Spalten in For Each in aktuelle Zeilenwerte ausgewertet werden (Sie können dies testen, indem Sie beispielsweise Row() = 1; hinzufügen). Möglicherweise können Sie dies vermeiden, indem Sie Name Expr() verwenden.
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));