수식을 계속해서 평가하는 이유는 무엇입니까?Jmp에서 예상치 못한 동작을 발견했습니다.
맞춤 수식을 사용하여 수식 열을 만든 후 다른 수식 열이 평가됩니다. 매번 데이터 테이블에서 셀을 선택합니다.
수식이 여러 번 평가되는 이유는 무엇입니까?
- 제거 myX =1; 마이엑스 첫 번째 수식에서 동작이 중지됩니다.
- 두 번째 수식에서 사용자 정의 수식을 제거하면 동작이 중지됩니다.
JMP 17.2
Names Default To Here( 1 );
row_count = 10;
dt = New Table( "myTable", Add Rows( row_count ), New Column( "X", set each value( Row() ) ) );
dt << New Column( "Formula As Constant",
Formula(
if(row()==1,write("\!N"));
Write("+1 ");
myX = 1;
myX
)
);
new namespace("test");
Add Custom Functions( New Custom Function( "test", "myFunc", Function( {}, 1 ) ) );
dt << New Column( "Formula via Custom Formula", Formula( test:myFunc() ) );
자동화 및 스크립팅Re: 수식을 계속해서 평가하는 이유는 무엇입니까?어쩌면 JMP는 사용자 정의 함수가 포함된 수식 열을 사용하는 경우 재평가를 수행해야 할 수도 있습니다.
JMP의 사용자 정의 공식 예와 Craige의 예를 사용하여 https://community.jmp.com/t5/Discussions/Why-does-selecting-deselecting-rows-trigger-column-formulas-to/mp/188823/highlight/true#M40750 . 스크립트를 실행하고 행 하나를 선택하고 lo를 확인한 후 중지 후 나머지 스크립트를 실행하고 행을 다시 클릭하십시오.
Names Default To Here(1);
dt = New Table("Untitled",
add rows(3),
// EVERYTHINGCOL depends on everything. it evaluates last.
New Column("EVERYTHINGCOL", Formula(
Write("\!nEVERYTHINGCOL,row" || Char(Row()));
:ROWSTATECOL + :INDEPCOL + :DEPONINDEP;
)
),
// DEPONINDEP depends on INDEPCOL, but not ROWSTATECOL.
New Column("DEPONINDEP",
Formula(
Write("\!nDEPONINDEP,row" || Char(Row()));
:INDEPCOL + 1;
)
),
// INDEPCOL is independent. It evaluates early, maybe first.
New Column("INDEPCOL",
Formula(
Write("\!nINDEPCOL,row" || Char(Row()));
17;
)
),
// ROWSTATECOL is directly dependent on row state information. It evaluates early, maybe first.
New Column("ROWSTATECOL",
Formula(
Write("\!nROWSTATECOL,row" || Char(Row()));
Selected(Row State());
)
)
);
dt << Run Formulas;
Write("\!N -------------------- INITIAL PRINTS----------------\!N");
// Clear Log();
dt << select rows(1);
dt << Run Formulas;
Write("\!N -------------------- SEL ROW PRINTS 1----------------\!N");
funcDef = Function({x, y = 10}, x + y);
newAdd = New Custom Function("myNamespace", "Add Ten", funcDef);
newAdd << Formula Category("NumberStuff");
Add Custom Functions(newAdd);
new_col = dt << New Column("AddTen", Formula(
Write("\!nAddTen,row" || Char(Row()));
myNamespace:Add Ten(Row(), 1))
);
dt << select rows(2);
dt << Run Formulas;
Write("\!N -------------------- SEL ROW PRINTS 2----------------\!N");
// new_col << Suppress Eval(1);
<< Run Formulas를 다시 실행하면 이 동작을 볼 수도 있습니다. 거기에 사용자 정의 수식이 없으면 아무 것도 인쇄되지 않으며(Scriptable[] 제외) 사용자 정의 함수를 사용하여 수식을 추가하면 각 << Run Formulas에서 모든 수식이 다시 실행됩니다(기본적으로 << rerun처럼 동작함) 모든 공식은 "반드시" 재평가되어야 합니다).
Re: 수식을 계속해서 평가하는 이유는 무엇입니까?수동으로 셀을 선택하는 경우...
흥미로운 #1:
(변수가 없는 c3과 같은 열의 경우) 마지막으로 선택한 행과 새로 선택한 행만 업데이트됩니다(타임스탬프 추적). 아마도 다음과 같은 아이디어가 있을 것입니다. 수동 변경이 가능한 2개 행입니다. ?
흠.
흥미로운 #2:
c1과 같은 변수가 있는 수식 열의 경우 전체 열이 다시 평가됩니다.
어쩌면 아이디어가 있을 수도 있습니다. 변수가 변경되었을 수 있으므로 모든 값을 확인하고 업데이트합시다.
하지만 반면에 JSL(i=-1000)을 통해 변수를 변경해도 업데이트(?)가 실행되지 않습니다.