列に数式を含むテーブルを作成する - Random Normal() - 外部jmpからこんにちは、
列のプロパティ内に数式を含む新しいテーブルを生成するJSLコードを手伝ってくれる人はいますか?
式のテーブル サイズ、列名、およびパラメーターは、添付のような外部 jmp ファイルから取得されます。
誰かがコードスニペストを共有できますか?それから始める方法はありますか?
スクリプティングRe: 列に数式を含むテーブルを作成する - Random Normal() - 外部 jmp から列 1 の削除はスクリプトで簡単に実行できるため、問題にはなりません。 特定の名前で列を作成するか、インデックスを使用して列を削除します
Names Default To Here(1);
dt = New Table("testtable", add rows(1),
new column("REMOVETHIS")
);
wait(1); //for demonstration purposes<BR />//dt << Delete Column(1);
dt << Delete Columns("REMOVETHIS");数式が必要ない場合は、[各値を設定] を使用する方が高速であるため、より適しています。
学習のために... Eval(EvalExpr()) は、理解するのが最も簡単なことではありませんが、役立つコンテンツがいくつかあります。 すぐに確認したところ、次のことがわかりました。
Re: 列に数式を含むテーブルを作成する - Random Normal() - 外部 jmp から実際のスクリプトは、未定義の列「Clolumn 1」を生成します。
また、 New Table () 内で列を生成しても、そのような列は作成されません。 ただの化粧品です...
その間、単一の列定義を持つスクリプトがあり、他の列は新しい列の外に追加されます。
また、新しく生成されたテーブルには、正しい計算値があります。 ただし、式の中を見ると、スクリプトの式が含まれています。
を使用してこの事実を隠すことができます各値を設定します()。 しかし、それは私を夢中にさせます... 
そして今、式が適切に評価されない理由を理解することに執着しています。 Eval () Eval Expr() および Expr() の使用に成功しませんでした。 私はそれらの機能を理解していると信じていますが、フォーミュラとの組み合わせではチャンスはありません.
しかし、私の最初の問題はあなたの提案で解決されました。 ありがとう!
Re: 列に数式を含むテーブルを作成する - Random Normal() - 外部 jmp からNew Table() 内に列を作成する特定の理由はありますか? それが可能かどうかはわかりませんが、可能であれば、New Table() の後にそれらを作成する場合と比較して、コードが煩雑になる可能性が高くなります。
Re: 列に数式を含むテーブルを作成する - Random Normal() - 外部 jmp からありがとう! すぐ下のこのコードで動作しました。 そして、それは私を大いに助けます!!
しかし、私は今、JSL を少し勉強したいと思っています。 そして、可能な実装について考えました。 2 番目のコード。
Clear Globals();
Names Default To Here( 1 );
//mydt =
//Data Table( "dt_RandomNormalParameter" ) <<
mydt = Current Data Table();
// New data table
my_newdt = New Table( "Table Name", Add Row ( 1000 ));
//lets use formulas, we can easily add more rows if needed
For Each Row(
mydt,
columnName = As Column(mydt, "Analysis Columns");
meanValue = As Column(mydt, "Mean");
stdDevValue = As Column(mydt, "Std Dev");
//use eval expr to get values in formula
Eval(Eval Expr(my_newdt << New Column(columnName, Numeric, Continuous, Formula(Random Normal(Expr(meanValue), Expr(stdDevValue))))));
);
// Code adds Column "Column 1"
私の問題を解決するための私のコンセプト:
Clear Globals();
Names Default To Here( 1 );
mydt = Current Data Table();
// New data table
my_newdt = New Table( "Table Name",
Add Rows (N Rows ( mydt )), // row count can be set by hand e.g. 1000
//For ( i = 1, i <= N Rows ( mydt ), i++, // for loop is not executed
New Column( Column(mydt, 1 )[1] , // Loop i==1
Numeric,
"Continuous",
Format( "Best", 6 ),
Formula( Random Normal( Column(mydt, :Mean )[1], Column(mydt, :Std Dev )[1] ) )// Column(mydt, :Mean )[1] is not evalueted
),
New Column( Column(mydt, 1 )[2] , // Loop i ==2
Numeric,
"Continuous",
Format( "Best", 6 ),
Formula( Random Normal( Column(mydt, :Mean )[2], Column(mydt, :Std Dev )[2] ) )//// Column(mydt, :Mean )[1] is not evalueted
)
//)// for loop
)// New data table残念ながら、「新しいテーブル」内で「for ループ」を使用し、式内で evaluete インデックスを使用する方法がわかりません。
Eval、Eval Expr で何らかの方法を想定しています。
しかし、私は構文を理解していません。
私のコンセプトは適切な構文でも機能すると思いますか?
何を変更する必要がありますか?
Re: 列に数式を含むテーブルを作成する - Random Normal() - 外部 jmp からFor Each Row を使用して RandomNormal_dt.jmp をループし、列から値を取得できます。 使用するEval(EvalExpr()) を使用して、式に値を追加します。
Names Default To Here(1);
dt_random = New Table("RandomNormal_dt",
Add Rows(20),
New Column("Analysis Columns",
Character(6),
"Nominal",
Set Values(
{"Name1", "Name2", "Name3", "Name4", "Name5", "Name6", "Name7", "Name8", "Name9", "Name10", "Name11", "Name12", "Name13", "Name14","Name15", "Name16", "Name17", "Name18", "Name19", "Name20"}
),
),
New Column("Mean", Numeric, "Continuous", Format("Best", 6), Set Values([1, 1, 0, 0, 0, 2, 2, 3, 3, 5, 10, -5, -6, 3, 3, 3, 3, 3, 0.5, 0.5]), ),
New Column("Std Dev",
Numeric,
"Continuous",
Format("Best", 6),
Set Values(
[0.0059167075785471, 0.00455419279075633, 0.00421951193571742, 0.00421951193571742, 0.00440945078910684, 0.00440945078910684,
0.0102216984358101, 0.00419398115162298, 0.0808821732109718, 0.0876924473662647, 0.119338972830502, 0.0918654224334168,
0.0921864791037008, 0.0868549769597964, 0.0808821732109718, 0.0865262154672911, 0.186459394109712, 0.189566585675401, 0.0876924449303901,
0.0434724818197371]
),
)
);
//create collection table
dt = New Table("Analysis");
//lets use formulas, we can easily add more rows if needed
For Each Row(
dt_random,
columnName = As Column(dt_random, "Analysis Columns");
meanValue = As Column(dt_random, "Mean");
stdDevValue = As Column(dt_random, "Std Dev");
//use eval expr to get values in formula
Eval(Eval Expr(dt << New Column(columnName, Numeric, Continuous, Formula(Random Normal(Expr(meanValue), Expr(stdDevValue))))));
);

次に、必要に応じて行を追加できます。行を追加した後、必要に応じて式を削除してデータテーブルを高速化できます。 必要な行数がわかっている場合は、Formula() を << Set Each Value() に置き換えて、十分な行数でコレクションを作成できます。