Diferencia entre bucles FOR y FOR EACH¿Alguien puede explicar por qué esto?
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);produce el resultado esperado
Y( :Runtime, :RunPulse, :RstPulse )
pero esto:
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);produce esto:
Y( ., ., . )
¿Esperaría que diera el mismo resultado? ¿Cómo debo cambiar FOR CADA bucle para dar el mismo resultado?
Investigación de Consumidores y MercadosCompartir y comunicar resultadosRe: Diferencia entre bucles FOR y FOR EACHNo es un error; en este caso, en realidad, JMP es coherente.Al indexar una lista, el resultado se devuelve sin evaluar.Al almacenar el resultado de un elemento indexado en una variable, evalúa el resultado.Recuerda eso Para cada uno ({valor, índice}, lista, expresión... ) es equivalente a Para (índice = 1, índice <= N elementos (lista), índice++, valor = lista[índice]; expresión... )
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: Diferencia entre bucles FOR y FOR EACHSi esto es.
Es un comportamiento extraño, ya que 1. tenemos la declaración For Each Row para la evaluación por fila, y 2. For Each debería tratar una lista (y estoy tratando de trabajar con una lista de referencias a columnas) igual que el bucle For.
¿Es esto un error o es un comportamiento previsto?
Re: Diferencia entre bucles FOR y FOR EACHSupongo que las columnas se evalúan en los valores de las filas actuales en For Each (puede probar esto agregando Row() = 1; por ejemplo). Es posible que puedas evitar esto usando 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));