루프에서 수직으로 연결하는 동안 메모리 절약인사말!
디렉터리에 있는 여러 테이블의 쿼리 결과를 하나의 단일 테이블로 연결하려고 합니다. 루프를 사용하여 테이블을 읽고 쿼리하고 결과를 연결하고 있습니다. 결과 테이블은 양호하지만 각 중간 연결 테이블이 계속 열려 메모리를 소모합니다.
각 중간 결과 테이블을 열지 말고 루프가 완료된 후에만 결과 테이블로 표시될 수 있는 데이터 프레임을 업데이트하라는 제안을 보내주셔서 감사합니다.
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>자동화 및 스크립팅</LINGO-LABEL></LINGO-LABS>Re: 루프에서 수직으로 연결하는 동안 메모리를 절약합니다.There 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" )
또한 리소스를 절약하기 위해 이 모든 작업을 비공개 테이블로 수행한 다음 마지막에 다음과 같이 테이블을 표시하는 것을 고려해보세요.
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: 루프에서 수직으로 연결하는 동안 메모리를 절약합니다.연결 대신 추가하도록 제안해 주셔서 감사합니다. 실제로 아래와 같이 추가를 시도했습니다. 문제는 루프에 추가될 때마다 모든 중간 테이블이 팝업된다는 것입니다.
x << Concatenate(x,y);
어떤 생각?
Re: 루프에서 수직으로 연결하는 동안 메모리를 절약합니다.연결된 테이블을 추가해야 합니다. 기본적으로 JMP는 테이블을 새 테이블로 연결합니다.
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>