Ayuda de secuencias de comandos para Table Box() dentro de List Box()Hola a todos,
Estoy tratando de escribir un código JSL que tome datos de una tabla de datos y los muestre gráficamente para que el usuario elija para un análisis más detallado. Lo que me gustaría obtener es algo así como una combinación entre el informe de valores propios de la plataforma PCA y el informe de resumen de efectos de la plataforma Fit Model. Me gustaría que la imagen se pareciera al informe PCA, pero la funcionalidad (es decir, poder seleccionar una fila) del informe Resumen de efectos.
Informe de valores propios de PCA (cómo quiero que se vea):

Informe de resumen del efecto del modelo de ajuste (la funcionalidad que me gustaría). En esta plataforma, uno puede seleccionar una fila en el cuadro de lista () y elegir "eliminar" o "agregar". No quiero eliminar ni agregar, pero quiero que el usuario pueda seleccionar la fila (del resultado anterior):

Adjunté la tabla de datos con la que estoy trabajando, esta es la "Tabla de datos actuales ()" en el código JSL a continuación. El siguiente código JSL puede ayudarme en parte, pero no exactamente lo que quiero.
Names Default To Here( 1 );
PC_dt = Current Data Table();
PC_n = {};
PC_eigv = {};
PC_per = {};
PC_cump = {};
For( i = 1, i <= N Rows( PC_dt ), i++,
Insert Into( PC_n, PC_dt:"Number"n[i] );
Insert Into( PC_eigv, Round( PC_dt:"Eigenvalue"n[i], 5 ) );
Insert Into( PC_per, Round( PC_dt:"Percent"n[i], 5 ) );
Insert Into( PC_cump, Round( PC_dt:"cumulative Percent"n[i], 5 ) );
);
PC_Rpt_win = New Window( "PC Results",
Outline Box( "Eigenvalues & cumulative Percent",
//List Box(
//List Box(
Table Box(
Number Col Box( "Number", Eval List( PC_n ) ),
Number Col Box( "Eigenvalue", Eval List( PC_eigv ), <<SET format=""></SET>
Con las secciones comentadas, obtengo el siguiente resultado del código (sin embargo, no se puede seleccionar ninguna fila):

Realmente no sé si necesito toda la parte del código anterior al esquema donde genero listas para las PC y valores propios, etc. Pero parecía la forma lógica de hacerlo ya que estoy tratando con columnas en una tabla de datos y las funciones requieren listas. Funciona, aunque no sea necesario.
</CODE></P><P> </P><P>Si incluyo una o ambas llamadas de List Box() comentadas alrededor de Table Box(), obtengo lo siguiente. Las filas son seleccionables, pero no aparece nada:</P><P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 221px;"><span class="lia-inline-image-display-wrapper" image-alt="DiedrichSchmidt_3-1635336043749.png" style="width: 221px;"><img src="https://us.v-cdn.net/6038925/uploads/images/37045iA319787974999980/DiedrichSchmidt_3-1635336043749.png" role="button" title="DiedrichSchmidt_3-1635336043749.png" alt="DiedrichSchmidt_3-1635336043749.png" /></span></SPAN></SPAN></P><P>No estoy seguro de lo que estoy haciendo mal, y el Índice de secuencias de comandos tiene ejemplos limitados de cómo usar correctamente la llamada List Box() con Table Box(). Intenté seguir la estructura de árbol desde la ventana del informe de la plataforma Fit Model, pero no funciona.</P><P> </P><P>En resumen, me gustaría corregir lo siguiente en mi script:</P><OL><LI>Corrija el cuadro Plot Col para que tenga la curva de porcentaje acumulativo como muestra el informe de PC (primera imagen de arriba). Esto no es tan crítico como el punto 2.</LI><LI>Corrija la llamada List Box() alrededor de Table Box() para que el usuario pueda seleccionar una fila en List Box que luego se enviará a otra función para un análisis más detallado.</LI></OL><P>¡Gracias por cualquier sugerencia y ayuda!,</P><P>SD</P></LINGO-BODY><LINGO-LABS id="lingo-labs-430708" slang="en-US" mode="NONE"><LINGO-LABEL>Automatización y secuencias de comandos</LINGO-LABEL><LINGO-LABEL>La personalización en masa</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-431611" slang="en-US" mode="NONE">Re: Ayuda de secuencias de comandos para Table Box() dentro de List Box()</LINGO-SUB><LINGO-BODY id="lingo-body-431611" slang="en-US" mode="NONE"><P>Aquí hay otra forma de obtener datos de tablas en un informe y el T2 de un informe PLS:</P>
<P> </P>
<PRE><CODE class=" language-jsl">Names default to here(1);
dt = Open("$Sample_data/Quality Control/Chemical Reactor Process.jmp");
pls = dt << Run Script("Fit PLS (Pro Only)");
//get values for the first column with the name R²Y by searching for display elements that have a
//child header box containing specific values
(pls << XPath("//NumberColBox[NumberColBoxHeader[text()='R²Y']]"))[1] << get as matrix;
//generalize this into a function and then call it for others column headers
getColumn = function({c},(pls << XPath("//NumberColBox[NumberColBoxHeader[text()='" || c || "']]"))[1] << get as matrix);
getColumn("Q²");
getColumn("Y Responses");
//To get T2, you need to send the message to a specific fit within the platform. As Mark mentioned this is tricky because you
//need to send the message to the analysis layer (I've been calling it a scriptable object), but to find the right object you
//navigate the report structure. I like Xpath, so here is how I would get the report (implied with the XPath function),
//navigate to the outline box (picks the first one matching a name), get the scriptable object or analysis layer and then
//send the message to save T2.
firstfit = (((pls << XPath("//OutlineBox[contains(text(),'NIPALS Fit with ')]"))[1]) << Get Scriptable Object) << Save T Square();
firstfit << Save T Square;
//This might better illustrate what is happening
show properties( report(pls)[Outline Box( "Partial Least Squares" )][Outline Box( "NIPALS Fit with 6 Factors Using Fast SVD" )] << get scriptable object );
Re: Ayuda de secuencias de comandos para Table Box() dentro de List Box()Este problema surge de un punto común de confusión. Una plataforma JMP se compone de la capa de análisis y la capa de informe. La capa de análisis es responsable del cálculo y responde a los comandos presentados en los menús del triángulo rojo. La capa de informe es responsable de la presentación de la información. La capa de informe es una estructura anidada de cuadros de visualización. Debe enviar el mensaje Guardar T Square a la capa de análisis, no a la capa de informe. La referencia a la capa de análisis es la que se devuelve al iniciar la plataforma. Por ejemplo,
biv = Current Data Table() << Bivariate( Y( :weight ), X( :height ), Fit Line );
La variable biv almacena una referencia a la plataforma o más específicamente a la capa de análisis. Luego obtiene una referencia a la capa de informe asociada con otro mensaje.
bivRep = biv << Report;
Espero que esta explicación aclare tu pregunta.
Re: Ayuda de secuencias de comandos para Table Box() dentro de List Box()Hola @jthi ,
Gracias de nuevo por su rápida respuesta y ayuda. Sí, <
Ahora, mi único problema es cómo salvar T². Cada vez que trato de abordar el cuadro de esquema en cuestión desde la plataforma PCA, aparece un error de registro que dice que el cuadro de visualización no reconoce <
¡Gracias!,
SD
Re: Ayuda de secuencias de comandos para Table Box() dentro de List Box()Para el artículo 1:
Supongo que hay alguna otra / mejor manera de hacer esto, pero encontré mensajes << Inferior y << Superior (requiere que se especifique Inferior). Con << Inferior, puede obtener los primeros valores de la columna acumulativa y luego establecerlos en Trazar cuadro de columna con Inferior
pcb << Lower(ncb << get as matrix);

Con su código se vería así (agregue referencias y utilícelas):
Ver más... Para obtener valores:
A veces, puede ser suficiente usar Convertir en tabla de datos (dependiendo de la plataforma y si está usando Por variable):

y luego revisando desde la tabla resultante el script de la tabla:


A veces, eso brinda una forma bastante rápida de obtener referencias para corregir los cuadros de visualización.
Re: Ayuda de secuencias de comandos para Table Box() dentro de List Box()Hola @jthi ,
Bueno, olvídese de la parte sobre DModX, el índice de secuencias de comandos me mostró cómo hacerlo y funciona como se esperaba. Tiene un ejemplo para Save T Square, pero eso no funciona. Me mantendré en ello. Creo que necesito hacer referencia al cuadro Esquema correcto.
¡Gracias!,
SD
Re: Ayuda de secuencias de comandos para Table Box() dentro de List Box()Hola @jthi ,
Gracias por sus comentarios rápidos. Lo había intentado antes, pero no había pasado nada, así que lo abandoné por otra ruta, pero no conducía a ninguna parte. Volví y lo probé, y funciona, ¡gracias! La funcionalidad añadida es útil. Eso definitivamente resolvió el punto 2, que era el más importante. Si hay alguna idea de cómo solucionar el elemento 1, sería genial, pero no esencial.
Esto está relacionado, pero tal vez otro hilo (avísame y lo volveré a publicar como otro hilo).
¿Sabe cómo usar JSL para guardar los valores DModX y T² de la plataforma PCA en la tabla de datos? Todo esto es para tratar de automatizar este proceso, o al menos eliminar varios de los otros pasos y simplemente brindarle al usuario los conceptos básicos para decidir la cantidad de PC que luego usará para guardar las fórmulas DModX y T².
¡Gracias!,
SD
Re: Ayuda de secuencias de comandos para Table Box() dentro de List Box()¿Existe una necesidad específica de List Box ()? Puedes usar << Establecer filas seleccionables (); para hacer que las filas se puedan seleccionar en Table Box y luego use << establecer la función de cambio de fila (Función ({this},); para agregar función a la selección.
Ejemplo del índice de secuencias de comandos:
Names Default To Here(1);
New Window("Mountains",
tb = Table Box(
String Col Box("Mountain", {"K2", "Delphi", "Kilimanjaro", "Grand Teton"}),
Number Col Box("Elevation (meters)", {8611, 681, 5895, 4199}),
Plot Col Box("", {8611, 681, 5895, 4199})
)
);
tb << Set Selectable Rows();
tb << set row change function(Function({this}, Print(this << get selected rows)));