La estructura If/Loop no funciona dentro de GraphBox.Estimados usuarios de JMP, esta es una simplificación de un problema que estoy experimentando actualmente en un script mío:
Estoy intentando codificar la creación de un Cuadro de gráficos dentro de una función (en este caso, ' Prueba '), para poder iterar fácilmente sobre este proceso más adelante.
Sin embargo, este fragmento de código no funciona porque las variables dentro del ' Si ' ( showHorLines , numReferenceLines ) no parecen evaluarse correctamente, o directamente no se evalúan. Esto sucede a pesar de que las demás variables que utilizo en los argumentos de la función ( ancho , altura ) funcionan como se espera, lo que me llevó a la conclusión de que el problema reside en el ' Si ' dentro del cuadro de gráfico.
Clear Globals();
Names Default To Here( 1 );
Test = Function({width, height, showHorLines, numReferenceLines}, {Default Local},
gb = GraphBox(
FrameSize(width, height),
XScale(0, width),
YScale(0, height),
XName("split"),
YName("color"),
//[] Generate grey horizontal lines
If(showHorLines == 1,
PenColor(65);
For(h = 0, h <= numReferenceLines, h++,
HLine(h*height/numReferenceLines)
);
PenColor(0),
);
);
win = NewWindow("new window", gb);
);
Test(200, 200, 1, 10);
¿Existe alguna forma de resolver este problema sin cambiar el cuadro gráfico por otro objeto?
Si es posible, también sería bueno que esto siguiera siendo una función porque una vez intenté un enfoque similar pero con Eval, EvalExpr y Expr que tampoco funcionó y tuvo un destino similar.
Atentamente
Automatización y secuencias de comandosAnálisis y modelado de datos básicosExploración y visualización de datosRe: El bucle if no funciona dentro de GraphBox.Sugiero usar Eval( Eval Expr() ). A mí me funcionó.
Names Default To Here( 1 );
Test = Function( {width, height, showHorLines, numReferenceLines},
{Default Local},
Eval(
Eval Expr(
gb = Graph Box(
FrameSize( Expr( width ), Expr( height ) ),
X Scale( 0, Expr( width ) ),
Y Scale( 0, Expr( height ) ),
XName( "split" ),
YName( "color" ),
If( Expr( showHorLines ) == 1,
Pen Color( 65 );
For( h = 0, h <= Expr( numReferenceLines ), h++,
H Line( h * Expr( height ) / Expr( numReferenceLines ) )
);
Pen Color( 0 );
,
)
);
win = New Window( "new window", gb );
)
)
);
Test( 200, 200, 1, 10 );
Re: El bucle if no funciona dentro de GraphBox.@nozellot Explicación rápida: el cuadro gráfico seguirá existiendo mucho después de que finalice la función Test. Los parámetros de Test desaparecen cuando Test finaliza. El script asociado al cuadro gráfico no podrá encontrar los parámetros posteriormente.
@mmarchandFSLR está utilizando mi solución preferida para convertir los parámetros a sus valores. Al identificarlos con
Expr( showHorLines )
y envolviéndolo con
Eval Expr( ... )
que evalúa todas las expresiones() y deja atrás las respuestas evaluadas, luego usando
Eval( ... )
Al ejecutar la función GraphBox() con una expresión que contiene constantes en lugar de variables, se obtiene un cuadro gráfico que no depende de parámetros que ya no están disponibles.