Colección de recursos útiles en la web:
- Hay una magnífica conferencia de @joseph_morgan en la serie Discovery Summit:
https://community.jmp.com/t5/Abstracts/Using-JSL-to-Develop-Efficient-Robust-Applications-EU-2018-415/ev-p/849638
Joseph explica los secretos y posibilidades del manejo de expresiones en JSL , así como las trampas asociadas a esta funcionalidad.
La conferencia se basa en el contenido de Funciones de manejo de expresiones: Parte I - Desentrañando el enigma de Expr(), NameExpr(), Eval(), ...
- Escritura dinámica de código JSL por @Jasean
(Guía paso a paso de los Trucos Universales n.° 1 y n.° 2, ver más abajo)
- Diferencia entre cadenas y expresiones - en 50 líneas:
Respuesta a una publicación de la comunidad de @Craige_Hales
- Excelente curso con muchos casos prácticos: Sesión 9: JSL avanzado , @jthi
- Encontrará más información en la Guía de scripting: expresiones avanzadas, macros y listas.
Lo esencial
interno:
#062 - Manejo de expresiones en JSL
#092 - Manejo de expresiones
| 1 |
no evalúe la expresión (2+1), simplemente guárdalo en la variable x. |
x = Expr (2+1) |
| 2 |
Obtén la expresión que está almacenada en x |
Nombre Expr (x) |
| 3 |
evaluación de fuerza |
Evaluación (myexpr) |
| 4 |
evaluar xyz y Reemplace Expr(xyz) con el valor de retorno |
Eval Expr( ... Expr(xyz)) |
*) Nota: en 1 y 4, se trata de la misma función " Expr(...)" , pero con el efecto opuesto:
En el caso 1, el contenido de Expr no se evalúa; en el caso 4, SOLO se evalúa el contenido de Expr.
3 Trucos Universales
| 1 |
Preevaluar partes de una expresión mediante Eval Expr() ... luego evalúe la expresión mediante Evaluar() Resuelve el 90% (con la opción 2: 99%) de todos los problemas |
Eval( Eval Expr ( ... Experiencia (eval 1st) ...)) Opción 2: Eval( Eval Expr ( ... Experiencia (Name Expr( )) ...))
|
| 2 |
Resuelve el mismo 99% de los problemas. # 1 - opción 2 |
Eval(substitute(Expr(), Expr(), Name Expr() ))
|
| 3 |
ultimate trick for referencias de columna ( @jthi, e.g. Sesión 9: JSL avanzado @33min ) |
Nombre Expr ( como columna ("nombre de columna" o : columna)) |
NÓTESE BIEN:
Algunas funciones evalúan sus argumentos, otras no, algunas evalúan solo algunos (por ejemplo , `head() ` evalúa sus argumentos hasta cierto punto: ¿Evalúa `head` sus argumentos? ), y otras los evalúan, pero si se trata de una sola variable, se comportan como `NameExpr()` . Las excepciones son las utilidades `show`, `write` e `print`.
Lamentablemente, la mayoría de estos detalles no están disponibles para los usuarios. Los usuarios tienen que adivinar.
He aquí una petición para que el editor JSL ayude a los usuarios mostrando esta información de forma interactiva: Resaltado de sintaxis avanzado en el editor JSL: ¿evalúa la función su argumento?
Si deseas obtener este apoyo automático, ¡sigue el enlace y vota!
Ejemplos de la comunidad:
| Tema |
Campo de golf |
Detalles |
| Columna() vs. Como columna() vs. nombre() |
¿Por qué estas formas de referenciar las columnas dan resultados diferentes?¿Cómo reemplazar `:column_name` con una variable en JMP JSL?Column() vs As Column() vs datable:column vs dt:As name("column") |
La sintaxis universal para hacer referencia a una columna es `:column` . Pero a menudo, resulta complicado usar correctamente ` :column` ... |
| Referencias de columnas en fórmulas de columnas |
Inserta una expresión dentro de otra usando Eval Insert, Eval Expr, Parse y Substitute. Estoy intentando crear una columna y rellenarla con una fórmula, pero me aparece un error. Utilice expr() para reemplazar los nombres de columnas variables en una fórmulaAgregar columnas de fórmulas según la lista de nombres de columnaCreación de una columna de fórmula a partir de una lista (JSL)Necesito ayuda con expresiones, referencias de columnas, fórmulas y cambio de nombre de columnas.Crea nuevas columnas mediante un cálculo de fórmula de bucle con nombres de columna específicos.JSL para crear una columna de fórmula con nombres de columna variables Nombre de columna de la cadena Script concatenar columnas Utilizar Expr() y Eval() con nombres de variables dentro de un bucleUtilice la variable de columna en la expresión IF JSL: Creación de una fórmula utilizando un nombre de columna variable Uso de variables para crear columnas de fórmulasCreación de fórmulas utilizando nombres de columna existentes Columnas iterativas |
Defina la columna mediante col = Name Expr(As Column(colname)) e insertarlo con Eval(Substitute())
Alternativas: As Column (Expr(colname)) con Eval(Eval Expr()) o Expr(Name Expr(AsColumn(dt, colname))) con Eval(Eval Expr()) ... |
| Referencias de columnas en llamadas y mensajes de la plataforma |
JSL ayuda a referenciar correctamente una columna.Ejecutar una plataforma sin conocer el número ni los nombres de las columnas Distribución mediante lista de columnas JSL: ayuda para referenciar correctamente una columna de tabla de datos para la plataforma de distribución. |
usar Name Expr(As Column(colname)) con Eval(sustituir())
... o si tienes problemas con una lista de columnas, simplemente agrega `eval()` o `evallist()` al argumento de `column()`. |
| usar una referencia de columna en una llamada a función |
Referencia de columna en función personalizadaFunción personalizada: cómo hacer referencia a la columna |
- envuelve la columna con Nombre Expr() - usar una lista |
| construir una expresión |
¿Puedes construir esto sin escribir la expresión como una cadena de texto?Ejecutar una plataforma sin conocer el número ni los nombres de las columnasUtilizar listas de columnas en fórmulas Cómo crear un script para una columna agregada a partir de una lista variable de referencias a columnas |
- Comience con un borrador vacío y rellénelo mediante insertar en(borrador, argumentos) - usar sustituto - Crea una lista y sustituye "lista" por otro símbolo JSL |
| Otras soluciones alternativas mediante el manejo de expresiones |
Excluir filas en el cálculo de cuantiles de columna |
Evite el almacenamiento en caché inapropiado en Col Quantile mediante el uso de una expresión. |
| De una versión a otra, se necesita menos manejo de expresiones para que todo funcione. |
¿enlace? |
|
[MásContenedores de temascomo esto]
Hola @hogi ,
Gracias por consolidar esta información y reunir mucha de esta información. La charla suena realmente informativa.
Me gusta cómo puedes hacer las cosas de varias maneras diferentes en JMP y JSL, pero a veces hay demasiadas formas diferentes que son muy específicas del caso en cuestión, y esto puede volverse algo engorroso cuando se intenta crear código que sea genérico y capaz de manejar muchos escenarios diferentes.
¡Gracias!,
DS
JSL y variables: tres cuestiones que debes tener en cuenta al escribir código JSL.
Diferentes problemas, siempre la misma solución : )
¿La solución?
-> solo lee la publicación principal.
c= 5;
col = Name Expr(:height);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = graph Builder(); framebox = report(gb)[FrameBox(1)];
// issues with variables in a message
// all 3 of them look quite innocent
// but none of them will survive a restart
New Column ("rescaled", Formula (c * :height));
dt << New Column ("rescaled", Formula (5 * col));
framebox << Add Graphics Script(Y Function( c * x, x ) );
// no issue here:
dt << concatenate(dt);
dt << new column(c, formula(3));Uno podría pensar: ¡nunca uses una variable en un mensaje!
Pero esto va demasiado lejos: los dos últimos ejemplos no plantean ningún problema.