我有一个重复的公式。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)