テーブル内の循環式または反復式の処理 (循環参照とも呼ばれます)。反復的な式があります。JMP はそれを解決できますが、新しい数式を作成するたびにサイクルについて警告が表示されます。
どうやって:
- 新しい反復を強制しますか?
- 再発を解決するための反復回数 (または停止基準) を構成しますか?
- 評価が再び行われないようにしますか? 数式メニューの「Suppress Eval」オプションが機能しませんでした。
この関数は少し複雑ですが、次の関数と変わりはなく、問題なく動作します。
X (k+1) = 0.99 * X(k)
If(
Selected() == 1, 1,
Row() == 1, 1,
Lag( :X ) * 0.99
)
高度な統計モデリング消費者および市場調査データアクセス品質およびプロセスエンジニアリング信頼性解析Re: テーブル内の循環式または反復式 (別名、循環参照) の処理。指定した関数は警告なしでそのまま動作するはずです。実際に B の数式で列 A を参照し、A の数式で列 B を参照している場合は、そのロジックを単一の数式として記述してみるか、次のようにすることができます。 @Craige_Halesのアドバイスに従って、代わりにスクリプトを使用してください。
例の数式を含む表。これは警告やエラーなしで評価されるはずです。
New Table( "Untitled 16",
Add Rows( 10 ),
New Column( "X",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( Selected() == 1, 1, Row() == 1, 1, Lag( :X ) * 0.99 ) ),
Set Selected
),
Set Row States( [0, 0, 0, 0, 1, 0, 0, 0, 1, 0] )
)
Re: テーブル内の循環 (または反復) 式の処理JMP の数式評価機能は、最初に非数式列のみに依存する数式列を評価し、次にすでに評価されている数式列に依存する数式列を評価することによって機能します。 列 A の式が列 B に依存し、列 B の式が列 A に依存する場合、JMP はどちらを最初に評価するかを選択できません。 JMP を騙して循環依存関係を作成した場合、どの列が他の列の古いデータを使用していたかを確認できなくなります。
JMP は列を上から下に評価します。 数式内で、lag 関数 (またはサブスクリプト) を使用して、前の行を調べ、以前に計算された値を取得できます。 今後の行を見るとどうなるかはわかりませんが、その値はまだ計算されていません。
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)
Re: テーブル内の循環 (または反復) 式の処理参考までに、Excel では循環参照を処理するために次のオプションを提供しています。
https://support.microsoft.com/en-us/office/change-formula-recalculation-iteration-or-precision-in-excel-73fc7dac-91cf-4d36-86e8-67124f6bcce4#:~:text=Iteration%20is %20the%20繰り返し%20再計算、%20呼び出された%20a%20circular%20reference 。