我有一個重複的公式。JMP 可以解決它,但每次我創建新公式時它都會警告循環。
我怎麼能夠:
- 強制進行新的迭代?
- 配置迭代次數(或停止標準)來解決重複問題?
- 停止評估再次發生? 取消公式菜單中的 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)