다른 행 필터로 사용자 함수를 호출하는 방법이 있습니까죄송합니다. 제목에서 가장 잘 설명하는 방법은 아니지만 현재 가지고있는 것과 달성하고자하는 것을 설명하려고 노력할 것입니다.
내가 가진 것 :
Col Min, Max 및 Mean에 대해 계산하는이 기능이 있습니다.
col_stats = Function( { COL_NAME }, {},
curr_dt = Cuurent Data Table();
min_val = Col Min ( curr_dt:Eval(COL_NAME));
max_val = Col Max ( curr_dt:Eval(COL_NAME));
mean_val = Col Mean ( curr_dt:Eval(COL_NAME));
Eval List({min_val, max_val, mean_val});
);내가 달성하고 싶은 것 :
특정 목록을 조합하여 데이터를 필터링하여 col_stat 함수를 호출 할 수 있기를 원합니다.
목록의 수는 사용자에 따라 변경 될 수 있습니다. 아래 예에서 사용자는 temp 및 vcc를 선택합니다 (사용자는 주파수 등을 추가 할 수 있음)
temperature = {-40, 0, 25, 100};<BR />vcc = {1.2, 1.26, 1.32};col_stat 함수를 사용하여 최소 최대 평균을 얻을 수 있기를 원합니다.
-40 및 1.20V
-40 및 1.26V
등등.
목록의 수를 알고 있다면 두 개의 목록 조합을 통해 반복하기 위해 이중 for 루프를 수행 할 수 있지만 사용자가 더 많은 목록을 추가 할 수 있도록 확장하고 싶습니다
잘 설명했으면 좋겠다.
스크립팅다시 : 다른 행 필터로 사용자 함수를 호출하는 방법이 있습니까이것에 대한 나의 생각은 데이터 테이블에서 선택된 행에서만 작동하도록 함수를 아주 간단하게 변경해야한다는 것입니다. 함수 호출과 함께 Show ()는 데이터 테이블 Big Class가 열려 있다고 가정합니다.
col_stats = Function( {dt, COL_NAME},
{defaultlocal},
min_val = Col Min( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
max_val = Col Max( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
mean_val = Col Mean( If( Selected( Row State( Row() ) ), column(dt, COL_NAME ), . ) );
Return( Eval List( {min_val, max_val, mean_val} ) );
);
show(col_stats(dt,"height"));
선택한 행에서만 계산을 수행하면 다음과 같은 기능을 사용할 수 있습니다.
dt << Where ()를 선택하십시오
원하는 항목 조합을 정의한 다음 함수를 호출하고 결과를 얻습니다.
그리고 모든 것을 단일 Select Where로 강제 할 필요는 없습니다. Select Where의 정의를 보면 여러 Select Where () 절을 전달하고 현재 선택에서 계약의 확장 여부를 지정하여 최종 전체 선택을 동적으로 작성할 수 있습니다. -40을 가진 모든 행이 현재 선택된 경우 JMP에 "vcc 만 1.20"의 추가 규정을 추가하도록 지시 할 수 있습니다.
다시 : 다른 행 필터로 사용자 함수를 호출하는 방법이 있습니까{{temperature}, {vccs}}에 중첩 루프를 사용 하시겠습니까?
다시 : 다른 행 필터로 사용자 함수를 호출하는 방법이 있습니까
Where 절을 사용하는 경우 관심있는 행의 값을 가져 와서 행렬 메소드를 사용하는 것이 조금 더 빠를 수 있습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_stats = Function( {dt, rows, COL_NAME},
{defaultlocal},
vals = column(dt, COL_NAME )[rows];
min_val = Min( vals );
max_val = Max( vals );
mean_val = Mean( vals );
Return( Eval List( {min_val, max_val, mean_val} ) );
);
show(col_stats(dt, dt<<GET rows="" where=""></GET>
이것은 약간의 메모리를 속도로 교환합니다. 두 개의 추가 벡터가 있지만 JSL 평가에서 루핑이나 조건이 필요하지 않습니다.
다시 : 다른 행 필터로 사용자 함수를 호출하는 방법이 있습니까중첩 된 for 루프를 수행하려면 두 목록에 대해 두 개의 for-loop를 하드 코딩해야합니다.
freq = {10, 20, 30}과 같은 필터 목록을 추가하면 작동하지 않기 때문에 피하고 싶습니다.
"By"목록에 temp, wafer, vcc를 추가하면 temp, wafer & vcc의 모든 조합의 분포를 생성 할 것입니다. 그러나 나는 그것이 내 자신의 기능으로 작동하는 것을 좋아합니다.