'select where' 및 'name selection in column'에서 매개변수 사용여보세요,
X와 Y의 두 열로 구성된 데이터 테이블을 가져와 데이터 테이블의 여러 행을 선택하고 선택 항목의 이름을 지정해야 합니다. 이것은 xy 데카르트 공간에서 선택된 20개의 직사각형에 해당하고 숫자(1에서 20까지)로 이름을 지정합니다(이미지로 작업 중입니다).
스크립트를 작성했지만 작동하지 않습니다. 두 가지 문제를 해결해야 한다고 생각합니다. 1) 매개변수를 어떻게 사용할 수 있습니까? 'select where'의 인수에서 X1, X2, ..를 참조하십시오. 2) '열의 이름 선택' 인수에서 매개변수(n_patch 참조)를 어떻게 사용할 수 있습니까?
감사합니다.
스크립트는 다음과 같습니다.
dt = Current Data Table();
X0 = 2332;
Y0 = 558;
n_patch = 0;
delta_x = 100;
delta_y = 100;
dist_y = 488;
dist_x = 656;
L_x = 500;
L_y = 500;
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
dt << Row Selection(
Select where( (:X >= X1 & :X <= X2) & (Y >= Y1 & Y <= Y2) )
);
dt << Name Selection in Column(
Column Name( "Patch#" ),
Selected( ("n_patch") ),
Unselected( "" )
);
)
);
데이터 테이블스크립팅Re: 'select where' 및 'name selection in column'에서 매개변수 사용매우 감사합니다. 코드는 매우 간결하고 작동합니다.
Re: 'select where' 및 'name selection in column'에서 매개변수 사용약간 이전 버전의 JMP를 사용 중일 수 있으므로 이러한 버전이 적합한지 잘 모르겠습니다(열에서 행 선택 또는 이름 선택 사용 안 함).
<< get rows where로 관심있는 행을 얻은 다음 column()[rows]로 값을 설정할 수 있습니다.
dt << New Column("Patch#", Character);
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
wantedRows = dt << get rows where(:X >= X1 & :X <= X2 & :Y >= Y1 & :Y <= Y2);
Column(dt, "Patch#")[wantedRows] = char(n_patch);
)
);Re: 'select where' 및 'name selection in column'에서 매개변수 사용안녕하세요, 신속한 답변에 감사드립니다.
귀하의 코드는 나에게 매우 유용합니다. 올바른 길을 가고 있다고 생각합니다. 그러나 여전히 작동하지 않는 것이 있습니다.
귀하의 코드를 실행하려고 했고 이름이 'Patch#1', 'Patch#2' 등인 많은 열을 추가하는 것을 확인했습니다. 그래서 줄을 변경했습니다.
Column Name( "Patch#" || char( n_patch ) )
~와 함께
Column Name( "Patch#")
Patch#라는 이름의 열 하나만 원하기 때문입니다.
그러나 코드는 내가 선택될 것으로 예상하는 것을 선택하지 않습니다. patch5, 10, 15, 20만 선택하고 다른 패치는 선택하지 않으며, 선택한 행은 패치에 해당하지 않습니다.
따라서 선택 명령이 제대로 작동하는지 확신할 수 없습니다.
도움을 주셔서 감사합니다.
마르첼로.
Re: 'select where' 및 'name selection in column'에서 매개변수 사용안녕 @MFVIT ,
데이터 테이블 자체에서 무언가를 찾는 것이 아니라 스크립트에서 X1 및 Y1의 값이 평가되는지 확인해야 합니다.이 문제는 Eval Insert, Eval Expr, Parse 및 Substitute를 사용하여 한 표현식을 다른 표현식에 삽입 . Eval( Eval Expr( ) )을 사용하여 이러한 일이 발생하는지 확인할 수 있습니다. 다음은 예제 데이터 테이블과 함께 코드를 사용하는 예제입니다.
Names default to here(1);
dt = New Table( "Example Data",
Add Rows( 10000 ),
New Column( "X", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Uniform( 0, 10000 ) ) ),
New Column( "Y", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Uniform( 0, 10000 ) ) )
);
X0 = 2332;
Y0 = 558;
n_patch = 0;
delta_x = 100;
delta_y = 100;
dist_y = 488;
dist_x = 656;
L_x = 500;
L_y = 500;
For( n_x = 1, n_x <= 4, n_x++,
For( n_y = 1, n_y <= 5, n_y++,
Xc = X0 - (n_x - 1) * (dist_x) + L_x / 2;
Yc = Y0 + (n_y - 1) * (dist_y) + L_y / 2;
n_patch = n_patch + 1;
X1 = Xc - delta_x;
X2 = Xc + delta_x;
Y1 = Yc - delta_y;
Y2 = Yc + delta_y;
Eval( Eval Expr(
dt << Row Selection(
Select where( (:X >= Expr( X1 ) & :X <= Expr( X2 )) & (:Y >= Expr( Y1 ) & :Y <= Expr( Y2 ) ) )
);
) );
dt << run formulas;
dt << Name Selection in Column(
Column Name( "Patch#" || char( n_patch ) ),
Selected( "n_patch = " || char( n_patch ) ),
Unselected( "" )
);
)
);