こんにちは、みんな、
条件が満たされるまで空のデータテーブルに行を追加し続けたいのですが、どうすればよいかわかりません。
次の例では、条件は、「定常状態」のベクトル内のすべての要素が 1 であるかどうかです。
ret = New Table( title,
New Column( "P", Numeric, "Continuous", Formula( ptable << get as matrix ) ),
New Column( "X(n)",
Expression,
"None",
Formula( If( Row() == 1, init_state, Lag( :Name( "X(n)" ), 1 ) * :p</img> ) ),
Set Selected,
),
New Column( "steady state",
Expression,
"None",
Formula( :Name( "X(n)" ) - Lag( :Name( "X(n)" ) ) == zeros ),
),
New Column( "States", Character, Values( names ) ),
);
P と init_state はデータ テーブルから読み取られた行列です。 X(n) の行の値は、最後の行の値と P の乗算です。 「定常状態」列の値は、0 と 1 で構成されるベクトルで、2 つの隣接する X(n) ベクトルの要素が等しいかどうかを表します。 「定常状態」のベクトルがすべて 1 になるまで (つまり、X(n) 内の 2 つの隣接するベクトルが完全に等しくなるまで)、このデータ テーブルに行を追加したいと考えています。
rownum = N Rows( ret );
cols = Column( ret, "steady state" );
ones = J( 1, vectorlength, 1 );
While((!vectorEqual(cols[rownum],ones)),
// add rows here, not sure how
rownum = N Rows( ret );
)
もう1つの質問は、選択した値が正しいかどうかを確認するためにコマンド「show(cols[rownum])」を追加しましたが、Empty()と表示されます... そもそもテーブルに全ての値が追加されていないので参照できないからでしょうか? もしそうなら、どのようにして状態を確認すればよいでしょうか?
助けていただければ幸いです。
どうでも。 「数式を再実行する」という追加を見つけました。問題を解決できます。 ありがとう!
どうもありがとうございます!できます!
列の最後の行のセル値を取得するのにまだ問題があります。 前述したように、ログ ウィンドウに「Empty()」と表示されます。 問題は、これらの値が数式を使用して割り当てられているため、アクセスしようとすると Empty() になることだと思います。 これらのセルの値を取得するにはどのようなスクリプトを使用すればよいでしょうか?
行の追加に関しては、次のように追加するだけだと思います。
rownum = N Rows( ret );
cols = Column( ret, "steady state" );
ones = J( 1, vectorlength, 1 );
While((!vectorEqual(cols[rownum],ones)),
ret << add rows(1);
dt << Rerun Formulas;
rownum = N Rows( ret );
)