Ahorre memoria mientras concatena verticalmente en bucle¡Saludos!
Estoy intentando concatenar los resultados de la consulta, de varias tablas de un directorio, en una sola tabla. Estoy usando un bucle para leer/consultar las tablas y concatenar los resultados. La tabla de resultados está bien, pero cada tabla concatenada intermedia sigue abriéndose y consume memoria.
Gracias por cualquier sugerencia para evitar abrir cada tabla de resultados intermedia, sino simplemente actualizar el marco de datos que se puede mostrar como tabla de resultados solo después de que se completa el ciclo.
Estoy usando JMP 17 Pro.
names default to here(1);<BR />dirLoc=Pick Directory("Select a directory", "myDirectory\");
fileList = Files In Directory(dirLoc);
dt1 = open(dirLoc || fileList[1]);
dt1 << Select Where( :Amount >= 500 );
x=dt1 << Subset ( Output Table Name("T1") );
Close(dt1, NoSave);
For(i = 2, i <= N Items( fileList ), i++,
dt = open(dirLoc || fileList[i] );
dt << Select Where( :Amount >= 500 );
y = dt << Subset ( Output Table Name("Temp"));
x = x << Concatenate( y);
Close(dt, NoSave);
Close(y, NoSave);
);
result = x<<SUBSET></SUBSET>
<LINGO-LABS id="lingo-labs-718508" slang="en-US" mode="CREATE"><LINGO-LABEL>Automatización y secuencias de comandos</LINGO-LABEL></LINGO-LABS>Re: Ahorrar memoria al concatenar verticalmente en bucleThere might be some misunderstanding here. Doing x << Concatenate( x, y ) will not update x, it will create a new table.
To update x with the values of y, use the literal expression x << Concatenate( y, "Append to First Table" )
Además, piense en hacer todo esto como tablas privadas para conservar recursos y luego, al final, muestre la tabla, así:
Names Default To Here( 1 );
dirLoc = Pick Directory( "Select a directory", "myDirectory\" );
fileList = Files In Directory( dirLoc );
dt1 = Open( dirLoc || fileList[1], Private );
dt1 << Select Where( :Amount >= 500 );
x = dt1 << Subset( Output Table Name( "T1" ), Private );
Close( dt1, NoSave );
For( i = 2, i <= N Items( fileList ), i++,
dt = Open( dirLoc || fileList[i], Private );
dt << Select Where( :Amount >= 500 );
y = dt << Subset( Output Table Name( "Temp" ), Private );
x << Concatenate( y, "Append to First Table" );
Close( dt, NoSave );
Close( y, NoSave );
);
x << Set Name( "Result" );
x << New Data View;
Re: Ahorrar memoria al concatenar verticalmente en bucleGracias por su sugerencia de agregar en lugar de concatenar. De hecho, intenté agregar como se muestra a continuación. El problema es que aparece toda la tabla intermedia cada vez que se agrega al bucle.
x << Concatenate(x,y);
¿Cualquier pensamiento?
Re: Ahorrar memoria al concatenar verticalmente en bucleDebe agregar las tablas concatenadas. De forma predeterminada, JMP concatena tablas en una tabla nueva.
names default to here(1);dirLoc=Pick Directory("Select a directory", "myDirectory\");
fileList = Files In Directory(dirLoc);
dt1 = open(dirLoc || fileList[1]);
dt1 << Select Where( :Amount >= 500 );
x=dt1 << Subset ( Output Table Name("T1") );
Close(dt1, NoSave);
For(i = 2, i <= N Items( fileList ), i++,
dt = open(dirLoc || fileList[i] );
dt << Select Where( :Amount >= 500 );
y = dt << Subset ( Output Table Name("Temp"));
x << Concatenate( y, "Append to First Table" );
Close(dt, NoSave);
Close(y, NoSave);
);
result = x<<SUBSET></SUBSET>