나는 반복되는 공식이 있습니다.JMP로 해결할 수 있지만 새 공식을 만들 때마다 주기에 대해 경고합니다.
내가 어떻게 할 수있는:
- 새 반복을 강제 실행하시겠습니까?
- 반복을 해결하기 위해 반복 횟수(또는 중지 기준)를 구성하시겠습니까?
- 평가가 다시 발생하지 않도록 하시겠습니까? 공식 메뉴의 Suppress Eval 옵션이 작동하지 않았습니다.
이 기능은 조금 더 복잡하지만 불만 없이 작동하는 다음과 다르지 않습니다.
X(k+1) = 0.99 * X(k)
If(
Selected() == 1, 1,
Row() == 1, 1,
Lag( :X ) * 0.99
)
JMP의 공식 평가기는 먼저 비공식 열에만 의존하는 공식 열을 평가한 다음 이미 평가된 공식 열에 의존하는 공식 열을 평가하는 방식으로 작동합니다. 열 A의 공식이 열 B에 종속되고 열 B의 공식이 열 A에 종속되는 경우 JMP는 먼저 평가할 것을 선택할 수 없습니다. 순환 종속성을 생성하도록 JMP를 속이면 어떤 열이 다른 열의 이전 데이터를 사용하고 있는지 확신할 수 없습니다.
JMP는 위에서 아래로 열을 평가합니다. 수식 내에서 지연 함수(또는 하위 스크립팅)를 사용하여 이전 행을 보고 이전에 계산된 값을 얻을 수 있습니다. 미래의 행을 보면 어떻게 될지 모르겠지만 그 값은 아직 계산되지 않았습니다.
Excel 규칙을 기반으로 작동할 수 있다고 생각할 수 있는 수식이 있지만 JMP는 스프레드시트가 아닙니다. 위의 규칙에 따라 플레이합니다. A열이 B열의 시차를 참조하게 하고 B열이 A열의 시차를 참조하게 해야 한다면 A와 B를 비공식 열로 만들고 JSL을 작성하여 채워야 합니다. "데이터를 업데이트해야 할 때 실행"과 같은 이름을 가진 테이블 스크립트에 해당 JSL을 추가합니다.
재귀 함수가 있으면 자신을 호출하는 JSL 함수를 만들 수 있습니다. JSL은 허용되는 재귀 깊이에 대해 100 정도로 상당히 낮은 제한을 가지고 있습니다. 재귀를 멈출 시기를 결정하는 if 문을 직접 작성해야 합니다. 일반적으로 깊이 매개변수는 (테스트되지 않고 무의미한...) 재귀를 중지하는 데 사용됩니다.
f = function({depth}, if(depth < 10, /* do something */ f(depth + 1) ) );
f(0)