親愛なるみんな、
数式である新しい列を作成し、JSL スクリプト内で変数を送信しようとすると問題が発生します。
列の平均ラグを計算しようとしている日付テーブルがあります。 対象の列は常に行ごとに均等に配置されているとは限らず、ラグが変化する場合があります。 ただし、このスクリプトの目的では、列全体の平均遅延を確認するだけで問題ありません。
これを行う方法 (手動でも実行できますが、むしろスクリプトで自動化したい) は、:X の Lag 列を作成し、次に :X-:Lag(X) の差を取得し、コル それは意味します。 式 (数学) 的には次のようになります。
ave_lag = Col Mean(:X-:Lag(X))
私が抱えている問題は、ラグ数式を含む新しい列を作成することです。 スクリプトを評価しようとするたびに、意図した列名ではなく、数式に記述した内容のリテラル テキストが配置されます。 dt<
Eval(Substitute(Expr())) も試しましたが、:X などの参照として列ではなく、引用符で囲まれた文字列が文字通り挿入されます。
たとえば、私が作業しているテーブルでは、次のコードを試してみました。
Eval(
Substitute(
Expr(
dt << New Column( "temp", Formula( Lag( __tcols__ ) ) )
),
Expr( __tcols__ ), xcols[1]
)
);これにより「temp」列が生成されますが、式は次のとおりです。

列の名前は t で、変数は xcols={"t"} です。 数式は Lag(:t) のようになり、列名ではなく列への参照になります。
この他のコードを試して、 :t の列番号を抽出し(データテーブル内で変更される可能性があります)、列(#)を数式に挿入しましたが、これも機能しません。
collist = dt << Get Column Names( string ); //creates a list of the column names
colnum = Loc( collist, xcols[1] )[1]; //locates the position in the list of the script variable xcols[1].
//This previous part basically gets the column number of the local variable xcol in the data table (it can change).
//This is the script where I'd like it to substitute
Eval(
Substitute(
Expr(
dt << New Column( "temp", Formula( Lag( Column( __tcols__ ) ) ) )
),
Expr( __tcols__ ), colnum
)
);これにより「temp」列も生成されますが、式は次のとおりです。

これは私が見つけるよりも簡単なはずだと思いましたが、期待する結果が得られないため、何か間違ったこと/奇妙なことをしているに違いありません。
列の平均ラグを計算する方法についての提案をいただければ幸いです。 必要なのは単一の数値だけであり、最終的には追加の列は必要ありません。
ありがとう!、
DS
試す:
Eval( Eval Expr(
dt << New Column( "TEMP", "Numeric", <<SET each="" value=""></SET>
JSL に文字列が実際には名前であることを伝える必要があります (文字列を変数のように見なすため)。名前として()関数
こんにちは@Erratic Attack 、
ご入力ありがとうございます。列の名前を列式に適切に挿入する仕事はしましたが、他の既存のコード内の特定のコード部分が、更新が必要ないくつかの表示ボックスへの参照で問題を引き起こすことになりました。ユーザー入力による。 残念ながら、そのせいでこの方法に進むにはあまりにも多くの問題が発生したため、最終的にコードを変更して、対象の列の値だけを扱うことになりました。まず行列を作成し、次に単純に行 (n+1) を計算します。 -row(n) 列の差と行列の平均。
n = Matrix( N Rows( dt ), 1 );
For( i = 1, i <= N Items( n ) - 1, i++,
n[i] = (dt:xcols[i + 1] - dt:xcols[i]) / timefactor
);
deltat = Round( Mean( n ), 3 );
ここで、「timefactor」は、列が日、分、時間などの単位であるかどうかに依存する変数です。
新しい列関数に変数を送信する方法という元の問題を解決してくれてありがとう。しかし、残念なことに、コード全体の機能を解決するには別の方法をとらなければなりませんでした。
ありがとう!、
DS