これはバグでしょうか、それとも何かが足りないのでしょうか?いくつかの乱数を生成し、テーブル変数に基づいて計算を行うために使用されるテーブル (ここでは簡略化され、「TestBug.jsl」と呼ばれています) があります。これを「シミュレーター テーブル」と呼ぶことにします。再計算するたびに、これが何度も繰り返す 1 つのシミュレーションになるからです。
次に、異なる入力で同じシミュレーションを何度も実行し、結果のテーブルを「結果」テーブルに連結することを自動化する次のスクリプトがあります。
テストするには、TestBug.jslを現在のデータテーブルとしてスクリプトを実行するだけです。
Names Default To Here(1);
VarList={1,2,3,4};
New Namespace(
"MyNS"
);
MyNS:Simulator = Current Data Table();
MyNS:FinalT=MyNS:Simulator<
<SUBSET></SUBSET>
<P>基本的に、スクリプトは入力リストに従ってシミュレータテーブル内のテーブル変数を反復処理して変更し、結果の数値を「結果テーブル」に連結します(数式は保持せず、数値のみを保持します)。</P> <BR /> <P>スクリプトは最初に「シミュレータ」と同じ列を持つ空の結果テーブルを作成し、「シミュレータ」内のテーブル変数を繰り返し変更して「結果」テーブルに連結します。</P> <BR /> <P>しかし、何らかの理由で、「シミュレータ」変数の値を変更するたびに、「結果」テーブルに同じ変数名を持つ2回目の反復で新しい列が作成され、奇妙なパターンで値が入力されます(画像を参照)。</P> <BR /> <P>基本的に、新しい連結行のアクティブ列の前の反復での変数の値と、他のすべての行の最後の反復の値を追加します。</P> <P>これは、数回の反復では煩わしいだけですが、多くの反復ではプロセス全体が非常に遅くなり、クラッシュすることになります。</P> <P>「連結」または「テーブル変数の設定」をスキップすると、列は追加されません。</P> <P>自分が何を間違っているのか理解できません。</P>
<LINGO-LABS id="lingo-labs-906674" slang="en-US" mode="CREATE">
<LINGO-LABEL>自動化とスクリプト</LINGO-LABEL>
</LINGO-LABS>
Re: これはバグですか、それとも何かが足りないのでしょうか?これらはテーブル変数によって追加されます。例えば、サブセットテーブルを作成した後、各連結後にテーブル変数を削除できます。
もっと見る...
Names Default To Here(1);
VarList = {1, 2, 3, 4};
New Namespace(
"MyNS"
);
MyNS:Simulator = Datatable("TestBug");
MyNS:FinalT = MyNS:Simulator << subset(
Output Table("final table"),
Copy formula(0),
All rows,
Selected columns only(0)
);
MyNS:FinalT << Select All Rows;
MyNS:FinalT << Delete Rows;
Try(MyNS:FinalT << Delete Table Variable("myvar"));
advancementWin = New Window("Progress", TBsizes = Text Box(), );
For(is = 1, is <= Length(VarList), is++,
myVarVal = VarList[is];
TBsizes << set text(
"Simulating:" || Char(myVarVal) || "(" || Char(is) || "/" || Char(Length(VarList)) ||
")"
);
MyNS:Simulator << Suppress Formula Eval(1); //i need this as in the final version i make more changes and i want to avoid recalc of the random each change
MyNS:Simulator << set table variable("myvar", myVarVal);
MyNS:Simulator << Suppress Formula Eval(0);
MyNS:Simulator << Rerun Formulas();
MyNS:FinalT << Concatenate(MyNS:Simulator, Append to first table);
Try(MyNS:FinalT << Delete Table Variable("myvar"));
);
advancementWin << Closewindow();
Re: これはバグですか、それとも何かが足りないのでしょうか?ありがとう。これで問題は解決しました。
もし私が正しく理解しているなら
変数の値が異なる 2 つのテーブルを連結すると、新しい列が追加され、「元のテーブルの値を追跡」できるようになります。
なぜそうしたいのかは分かりますが、それは混乱を招く奇妙な行動です
あなたのトリックは問題を解決しますが、完全性のために私は
Try(MyNS:FinalT << Delete Table Variable("myvar"));
連結前