여러분 모두에게,
수식인 새 열을 만들고 JSL 스크립트 내에서 변수를 보내는 데 문제가 있습니다.
열의 평균 지연을 계산하려는 날짜 테이블이 있습니다. 관심 있는 열이 항상 행별로 균등한 간격으로 배치될 필요는 없으며 지연이 때때로 변경될 수 있습니다. 그러나 내 스크립트의 목적에 따라 전체 열의 평균 지연만 살펴보는 것도 괜찮습니다.
내가 이 작업을 수행하려고 했던 방식(수동으로 수행할 수도 있지만 스크립트를 사용하여 자동화하는 것이 더 나음)은 :X의 Lag 열을 생성한 다음 :X-:Lag(X)의 차이를 취하는 것입니다. Col은 그 말을 의미합니다. 공식(수학)은 다음과 같아야 합니다.
ave_lag = 열 평균(:X-:Lag(X))
내가 겪고 있는 문제는 Lag 수식이 포함된 새 열을 만드는 것입니다. 스크립트를 평가하려고 할 때마다 의도한 열 이름이 아닌 내가 작성한 내용의 리터럴 텍스트가 수식에 배치됩니다. 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에 알려야 합니다. 이름으로() 기능
안녕 @ErraticAttack ,
귀하의 의견에 감사드립니다. 열 이름을 열 수식에 올바르게 삽입했지만 다른 기존 코드 내의 특정 코드 조각으로 인해 업데이트해야 하는 일부 표시 상자에 대한 참조에 문제가 발생했습니다. 사용자 입력에. 안타깝게도 이 경로로 가는 데 너무 많은 문제가 발생했기 때문에 결국 코드를 변경하고 관심 있는 열의 값만 사용하여 작업했습니다. 먼저 행렬을 만든 다음 단순히 행 (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