다음 코드를 사용하면 행 선택 옵션을 통해 파티션 트리에서 여러 리프 노드를 선택할 수 있습니다. 그러나 사용자가 좋은 모집단과 나쁜 모집단의 파일 생성을 위해 리프 노드를 선택한 후에는 파티션 창을 닫아야 합니다. 파티션 창을 닫을 필요가 없는 대안이 있습니까? 또는 내가 사용할 수있는 onClose() 대신 다른 기능이 있습니까?
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
// Matrix of all rows that were selected
::wasSelected = [];
// Row state handler function
updateWasSelected = Function({x}, {Default Local},
// 'x' is a column vector of row states that have CHANGED. We just need those that are now selected . . .
For( i = 1, i <= NRow(x), i++,
// Need to accumulate selected rows, not adding duplicates
If( Selected(RowState(x[i])) & !Contains(::wasSelected, x[i]),
::wasSelected = VConcat(::wasSelected, x[i])
);
);
);
// Assign the handler to the table
rsh = dt << MakeRowStateHandler(updateWasSelected);
obj = dt << Partition(
Y( :NPN1 ),
X( :PNP1, :PNP2, :PNP3, :PNP4, :NPN2, :NPN3, :NPN4 ),
Method( "Decision Tree" )
);
obj << ShowGraph( 0 );
obj << SplitBest( 4 );
obj << Show Split Count( 1 );
obj << Show Split Prob( 1 );
obj << onClose(
If( NRows(::wasSelected) > 0,
filepath = "$Desktop";
Try(
dtTemp = dt << subset( invisible, rows( ::wasSelected ), selected columns( 0 ) );
Close( dtTemp, save( filepath || "\" || "badpopulation.jmp" ) ),
Print("No rows for table!");
);
dt << invert row selection;
Try(
dtSEG = dt << subset( invisible, selected rows( 1 ), selected columns( 0 ) );
Close( dtSEG, save( filepath || "\" || "goodpopulation.jmp" ) ),
Print("No rows");
);
);
dt << clearRowStates;
);