La tabla de subconjuntos sigue mostrando filas antiguas: ¿Cómo liberar memoria entre ejecuciones?I’m working on a JMP JSL script where I filter tables based on a lista de valores proporcionada por el usuario. I create filtered tables using Subset.
El problema con el que me encuentro es:
-
En la primera ejecución , la tabla filtrada muestra las filas correctas.
-
En la segunda ejecución , si ingreso una nueva lista, la tabla filtrada a veces sigue mostrando filas de la ejecución anterior , o combina filas antiguas y nuevas.
-
I’m using Names Default To Here(1) and Clear Symbols() at the end of the script, but that No borra completamente la tabla de la memoria JMP, so Subset seems to retain references to old rows.
¿Existe alguna forma recomendada en JMP de borrar completamente las referencias de memoria para las tablas antes de crear nuevos subconjuntos?
hows to make Subset filtering repetible en múltiples ejecuciones without old data showing up?
Automatización y scriptingExploración y visualización de datosRe: La tabla de subconjuntos sigue mostrando filas antiguas: ¿Cómo liberar memoria entre ejecuciones?¿Puedes proporcionar un ejemplo de tu script? Si estás utilizando subset correctamente, no mostrará "filas antiguas".
Re: La tabla de subconjuntos sigue mostrando filas antiguas: ¿Cómo liberar memoria entre ejecuciones?¿Podrías compartir una versión simplificada de tu código, lo más corta posible ?
... comenzando con la carga de una tabla de datos, por ejemplo
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Obtén respuestas rápidas y útiles a tus preguntas
Obtener rápidamente las respuestas correctas a las preguntas correctas
Re: La tabla de subconjuntos sigue mostrando filas antiguas: ¿Cómo liberar memoria entre ejecuciones?La mayoría de estos problemas de sincronización se pueden solucionar mediante esperar(0).
Simplemente agréguelo después del comando subset, y quizás otro antes del comando subset.
Re: La tabla de subconjuntos sigue mostrando filas antiguas: ¿cómo borrar la memoria entre ejecuciones?FilterByValueList = Function({sourceTbl, valueList, outName},
tempTbl = sourceTbl << Duplicate Window();
tempTbl << Clear Row States;
For(i = 1, i <= N Items(valueList), i++,
val = valueList[i];
tempTbl << Row Selection(
Select Where(:Batch Number == val, Current Selection("Extend"))
);
);
resultTbl = tempTbl << Subset(
Selected Rows(1),
Output Table Name(outName),
Invisible
);
Return(resultTbl);
);
// Example usage:
RunDataSubset = FilterByValueList(DataRuns, SelectedValues, "RunDataSubset");
MetaSubset = FilterByValueList(MetaRuns, SelectedValues, "MetaSubset");
//SelectedValues is a list
Re: La tabla de subconjuntos sigue mostrando filas antiguas: ¿cómo borrar la memoria entre ejecuciones?Gracias. No pegué el código. Aquí está el fragmento como referencia: leyendo los valores de la lista de entrada mediante una ventana y luego haciendo lo siguiente:
// Directory path
pathDir = "J:\jmp-data\raw_data";
fileList = Files In Directory(pathDir);
Show(fileList);
selectedValues = {};
For(i = 1, i <= N Items(fileList), i++,
For(j = 1, j <= N Items(targetSource), j++,
If(Contains(fileList[i], targetSource[j]),
Insert Into(selectedValues, targetSource[j]);
Break();
);
);
);
countValues = N Items(selectedValues);
Show(selectedValues);
FilterByValueList = Function({sourceTbl, valueList, outName},
tempTbl = sourceTbl << Duplicate Window();
tempTbl << Clear Row States;
For(i = 1, i <= N Items(valueList), i++,
val = valueList[i];
tempTbl << Row Selection(
Select Where(:Batch Number == val, Current Selection("Extend"))
);
);
resultTbl = tempTbl << Subset(
Selected Rows(1),
Output Table Name(outName),
Invisible
);
Return(resultTbl);
);
// Example usage:
RunDataSubset = FilterByValueList(DataRuns, SelectedValues, "RunDataSubset");
MetaSubset = FilterByValueList(MetaRuns, SelectedValues, "MetaSubset");
También encontré que la ventana que se está creando para tomar la entrada del usuario tiene variables globales y esa podría ser la razón por la que aparecen datos antiguos:
SelectedValuestext = Select_Values_test0 <
<GET text=""></GET>
<BR /> <P><CODE class=" language-jsl"> SelectedValuesText0 = {}; - still has nothing so whenever I run the code again it should take new user input values if they are diff.
</CODE></P>
Re: La tabla de subconjuntos sigue mostrando filas antiguas: ¿cómo borrar la memoria entre ejecuciones?¿De dónde viene la función << Duplicar ventana() y qué se supone que debe hacer?

JSL cuenta con muchas funciones potentes que puedes usar en lugar de usar "For()" constantemente. Puedes revisar las listas más rápido usando "Filtrar cada", "Transformar cada" y "For Each", y probablemente puedas realizar la selección sin bucles usando "Contains()".
Re: La tabla de subconjuntos sigue mostrando filas antiguas: ¿cómo borrar la memoria entre ejecuciones?Me di cuenta de que la ventana duplicada no existe, así que seguí adelante y creé el dt de esta manera:
dt = inputTable << Subset(All Rows, All Columns,Output Table("dt"),Invisible);<BR /><BR />
No sé si hay una manera más fácil.
a = b no funciona. Para la tabla de datos, estaba buscando copiar tabla(), encontré copiar archivo(),
</CODE></PRE>
<P>Además, crear de esta manera requiere que la mesa se cierre siempre. Me resultó más fácil gestionar y entregar.</P>
<PRE><CODE class=" language-jsl">
<BR />calcTable = Try( Data Table("KPI"), Empty() );
Re: La tabla de subconjuntos sigue mostrando filas antiguas: ¿cómo borrar la memoria entre ejecuciones?Si está utilizando el subconjunto correctamente, no se mostrarán las "filas antiguas".
Re: La tabla de subconjuntos sigue mostrando filas antiguas: ¿cómo borrar la memoria entre ejecuciones?No estoy seguro de por qué estás creando dos subconjuntos en este caso.
Names Default To Here(1);
path = Convert File Path("$SAMPLE_DATA/", windows);
files = Files In Directory(path);
targetfiles = {"Big Class.jmp", "Probe.jmp"};
files_of_interest = Filter Each({target}, targetfiles,
Contains(files, target);
);
create_filtered_table = function({dt, values, tablename}, {Default Local},
rows_of_interest = dt << Get Rows Where(Contains(values, :Filename));
dt_res = dt << Subset(Rows(rows_of_interest), Selected Columns(0), Output Table(tablename), Invisible);
return(dt_res);
);
dt1 = New Table("table1",
Add Rows(6),
Compress File When Saved(1),
New Column("Filename",
Character,
"Nominal",
Compact(),
Set Values({"Big Class.jmp", "a", "b", "c", "Big Class.jmp"})
)
);
dt2 = New Table("table1",
Add Rows(6),
Compress File When Saved(1),
New Column("Filename",
Character,
"Nominal",
Compact(),
Set Values({"Probe.jmp", "a", "b", "c", "Big Class.jmp"})
)
);
dt_res1 = create_filtered_table(dt1, files_of_interest, "Table1");
dt_res2 = create_filtered_table(dt2, files_of_interest, "Table2");