Problema con el conmutador de columnas de scripting usando variables<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola, tengo un problema con la programación del conmutador de columnas a partir de variables de columna obtenidas de los cuadros de visualización de la GUI.Mi ejemplo aquí es con el generador de gráficos, pero probé otra plataforma con resultados similares. No sé si es por cómo obtengo los nombres de las columnas (obj << get items()), así que incluí todo eso en el jsl adjunto.Lo que debería suceder es que el generador de gráficos debería cargarse sin errores, la columna "Y" debería estar en la función Y, y luego "Y" más mis dos columnas ficticias agregadas "temp" y "temp2" deberían estar en el conmutador de columnas. Pero en el primer argumento de Column Switcher(), parece que solo le gusta haber escrito texto allí. Si escribo el texto "Y" o ":Y", funciona bien, pero no he encontrado una manera de masajear la variable de mi columna que contiene "Y" de manera que funcione. Cuando uso la variable, arroja un error.
Aquí hay un fragmento del código y he adjuntado un script simplificado que abrirá datos de muestra, generará una GUI autocompletada (simplemente haga clic en Aceptar) y podrá ver cómo funcionará simplemente escribir los nombres de las columnas, pero mis muchos los intentos con variables no lo harán. ¿Estoy haciendo algo mal o es un error? Si es así, ¿hay alguna solución? Estoy usando JMP 11.2.0.
Tenga en cuenta que este fragmento se muestra solo como referencia. Si desea ejecutarlo, ejecute todo el archivo adjunto. yParamNames es una lista que contiene los parámetros que se van a trazar."Y" es la primera columna de esta lista.
Generador de gráficos(
Tamaño (570, 559),
Variables (X(columna(dtDataOrig,tempName[1])), Y(columna(dtDataOrig,yParamNames[1])), Superposición(columna(dtDataOrig, partIdName[1]))),
Elementos(
Línea (X, Y, Leyenda (13), Orden de filas (0), Estadística de resumen ("Media"))
),
Conmutador de columna (
//"Y", // escribir el texto del nombre de la columna funciona
// No funciona
//como columna(dtDataOrig, Y),
//como columna(:Y),
//como columna(Y),
//columna(Y),
//columna(:Y),
yParamNames[1], // <---- Creo que esto funcionaría y sería la implementación más sencilla, pero no puedo lograr que acepte una variable.
yNombresParam
)
);
Gracias,
Miguel
Re: Problema al realizar scripts en el conmutador de columnas usando variablesEl problema reportado aquí tiene algunos años, pero me gustaría confirmar que Column Switcher ahora evalúa sus argumentos como debería, por lo que los clientes ya no deberían tener que solucionar este problema. Debería funcionar correctamente en JMP 13 y versiones posteriores.
Re: Problema al realizar scripts en el conmutador de columnas usando variablesGracias David, esto funciona perfectamente.Me preguntaba si debería probar la técnica Eval(Parse(Eval Insert())), pero no habría pensado en usarla después de crear primero el objeto generador de gráficos.
Gracias a PMroz también por su aporte... En realidad, este guión fue idea tuya.En la última Discover Summit, pregunté acerca de mostrar datos de caracterización de temperatura en forma de diagrama de dispersión, como reemplazo de mis scripts de Excel, y usted sugirió un generador de gráficos con conmutador de columnas. Funciona de maravilla. ¡Gracias!
-Miguel
Re: Problema al realizar scripts en el conmutador de columnas usando variablesIntente sacar el conmutador de columnas de la función Graph Builder y crearlo usando un mensaje:
gb = Generador de gráficos(
Tamaño(...),
Variables (...),
Elementos(...)
);
evaluar ( Analizar gramaticalmente ( Insertar evaluación ( "\[
gb << Conmutador de columnas( ^yParamNames[1]^, ^yParamNames^ )
]\" ))) ;
La sintaxis del último fragmento no es fácil de explicar en detalle pero es fácil de usar.Utiliza el mismo principio que Peter describió pero con una sintaxis que no requiere secuencias de escape para construir la cadena.
Es útil comprender la secuencia que utiliza para crear este último fragmento de código.Empiezas con este patrón:
evaluar ( Analizar gramaticalmente ( Insertar evaluación ( "\[
]\" ))) ;
escribes (o copias) tu código JSL dentro de este patrón:
gb << Conmutador de columnas (yParamNames[1], yParamNames)
Para indicar que hay variables que deben evaluarse dinámicamente, cite con un símbolo de intercalación: ^variable^
Re: Problema al realizar scripts en el conmutador de columnas usando variables¿Es esto lo que tenías en mente? Probé esto y todavía se comporta de la misma manera.
cadena = "Constructor de gráficos (
Tamaño (570, 559),
Variables (X(columna(dtDataOrig,tempName[1])), Y(columna(dtDataOrig,yParamNames[1])), Superposición(columna(dtDataOrig, partIdName[1]))),
Elementos(
Línea (X, Y, Leyenda (13), Orden de filas (0), Estadística de resumen (\!"Media\!" ) )
),
Conmutador de columna (
//yParamNames[1],
:S,
yNombresParam
)
);" ;
evaluar ( analizar gramaticalmente ( cadena )) ;
Re: Problema al realizar scripts en el conmutador de columnas usando variablesA veces las variables no funcionan directamente en JSL.Cree el código del generador de gráficos dinámicamente como una cadena que sabe que funcionará y ejecútelo con eval(parse()).
dt = abierto ( "$sample_data\gran clase.jmp" ) ;
cadena = "Constructor de gráficos (
Mostrar panel de control (0),
Variables (X(:peso), Y(:altura)),
Elementos(
Puntos (X, Y, Leyenda (1), Jitter (1)),
Línea de ajuste (
X,
Y,
Leyenda( 4 ),
Confianza de ajuste( 1 ),
Confianza de predicción (0),
Grado( \!"Lineal\!" ),
Ecuación (0),
Error cuadrático medio (0),
R²( 0 )
)
)
)" ;
evaluar ( analizar gramaticalmente ( cadena )) ;