안녕하세요,
X와 Y 좌표를 정의하는 두 개의 열이있는 표에서 표에 정의 된 각 점에 대한 대화식 핸들이있는 그래프 상자를 만들려고합니다. 하나씩 핸들을 추가하면 (nw1 참조) 완벽하게 작동하지만 ForEachRow 또는 For 루프 (nw2 및 nw3 참조)를 사용하여 프로세스를 자동화하려고하면 점이있는 그래프 상자가 표시되지만 수는 없습니다 대화 형으로 이동했습니다. 핸들 생성을 자동화하는 올바른 방법은 무엇입니까?
감사, Étienne
dt = NewTable ( "데이터 점수" , AddRows ( 삼 ),
NewColumn ( "xVar" , 숫자, "마디 없는" , SetValues ([ 1 , 2 , 삼 ]))),
NewColumn ( "yVar" , 숫자, "마디 없는" , SetValues ([ 1 , 2 , 삼 ])))
);
CurrentDataTable (dt);
nw1 = 새창 ( "예제 1" ,
gr1 = GraphBox (
프레임 크기( 400 , 400 ), XScale ( 0 , 5 ), Y 스케일 ( 0 , 5 ),
핸들 (: xVar [ 1 ], : yVar [ 1 ], : xVar [ 1 ] = x; : yVar [ 1 ] = y;);
핸들 (: xVar [ 2 ], : yVar [ 2 ], : xVar [ 2 ] = x; : yVar [ 2 ] = y;);
핸들 (: xVar [ 삼 ], : yVar [ 삼 ], : xVar [ 삼 ] = x; : yVar [ 삼 ] = y;);
);
);
nw2 = 새창 ( "예 2" ,
gr2 = GraphBox (
프레임 크기( 400 , 400 ), XScale ( 0 , 5 ), Y 스케일 ( 0 , 5 ),
ForEachRow (
핸들 (: xVar, : yVar, : xVar = x; : yVar = y;);
);
);
);
nw3 = 새창 ( "예 3" ,
gr3 = GraphBox (
프레임 크기( 400 , 400 ), XScale ( 0 , 5 ), Y 스케일 ( 0 , 5 ),
에 대한 (i = 1 , i <= NRows (dt), i ++,
핸들 (: xVar [i], : yVar [i], : xVar [i] = x; : yVar [i] = y;);
);
);
);
감사 @cwillden . 솔루션이 완벽하게 작동하고 확장 가능합니다. 그것은 SAS 매크로 코드를 생각 나게합니다. 이것은 본질적으로 여기에서하려고했던 것입니다. 즉, for 루프를 작성한 다음 실행합니다.
안녕하세요 @rassart ,
핸들을 추가 할 때 테이블의 행 값을 하드 코딩해야하는 경우입니다. 그 이유는 방금 만든 그래픽 스크립트를 창에서 그래프 상자 밖으로 가져올 때 분명 해집니다. 예를 들어, 예제 3의 그래픽 스크립트는 다음과 같이 보입니다.
gr3 << Get Graphics Script;
/*:
{For( i = 1, i <= N Rows( dt ), i++,
Handle(
:xVar[i],
:yVar[i],
:xVar[i] = x;
:yVar[i] = y;
)
)}변수 'i'의 최종 값은 예제에서 4로 설정되므로 'i'값이 하드 코딩되지 않았기 때문에 핸들이 제대로 작동하지 않습니다. 하드 코딩이 없으면 그래픽 스크립트는 항상 'i'의 현재 값에 의존합니다.
for 루프를 사용하여 이러한 값을 하드 코딩 할 수있는 방법은 다음과 같습니다.
nw4 = New Window( "Example 4", gr4 = Graph Box( FrameSize( 400, 400 ), X Scale( 0, 5 ), Y Scale( 0, 5 ), ) );
For( i = 1, i <= N Rows( dt ), i++,
Eval( Parse( Eval Insert( "gr4[framebox(1)] << Add Graphics Script(Handle(:xVar[^i^], :yVar[^i^], :xVar[^i^] = x; :yVar[^i^] = y;));" ) ) )
);
분명히 Handle () 함수는 실행시 구문 분석을 처리 할 수 없습니다. 다음 스크립트는
Current Data Table( dt );
nw1 = New Window( "Example 1",
gr1 = Graph Box(
FrameSize( 400, 400 ),
X Scale( 0, 5 ),
Y Scale( 0, 5 ),
Handle(
:xVar[1],
:yVar[1],
:xVar[1] = x;
:yVar[1] = y;
);
Handle(
:xVar[2],
:yVar[2],
:xVar[2] = x;
:yVar[2] = y;
);
Handle(
:xVar[3],
:yVar[3],
:xVar[3] = x;
:yVar[3] = y;
);
)
);