나중에 테이블 변수를 변경하고 열 값을 계속 업데이트할 수 있도록 열 수식 내에 동적으로 생성된 테이블 변수 이름에 대한 참조를 삽입하려면 어떻게 해야 합니까? 그런 다음 알 수 없는 수의 열에 대해 이 작업을 수행합니다.
dt = Current Data Table();
NewCol = function({ColNr},
//Set a name table variable with the name of the column and RMSE appended to it
dt << Set Table Variable( concat(Column(ColNr)<< Get Name(),"RMSE"), 0 );
//Create a new column with the same name as the original column but with " with RMSE" at the end.
//Place a formula in this column which takes the original column value and add random RMSE as specified by the table variable to it.
Eval(
substitute(
expr(
dt<<NEW column=""></NEW>
도전해주셔서 감사합니다, 한번 더 해보고 해결했습니다 
맞습니다. 열 이름을 만드는 것이 좋습니다. 새 열 식의 수식 부분을 만드는 데는 작동하지 않습니다.
내가 해야 할 일은 구문 분석 함수에서 열과 테이블 변수 이름 주위에 :Name( "...") 을 두는 것입니다.
dt = New Table( "Untitled 9",
Add Rows( 0 ),
New Column( "Pred Formula Thickness (A)",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[-1.09815926721176, -0.143977108758327, -1.60078929360768,
-0.340409665497429, -0.581215173360104, 0.233876291958488,
-0.357108531367114, 0.0704280592629584, 1.86236889119533,
0.669812241478143, -0.00962200322380528, 1.33041117732878,
0.533367791752501, 2.24183743599671, -0.506060621538248]
),
Set Display Width( 145 )
)
);
ColNr = 1;
//Create the table variable based on the column name with RMSE added to it.
dt << Set Table Variable( concat(column(ColNr)<< Get Name()," RMSE"), 0 );
//Create the text for the column formula. Notice that the formula stored in test is correct. It is the 'column name' + 'the table variable' multiplied with random normal.
test = ":Name( \!"" || char(column(ColNr)<< Get Name()) || "\!") + :Name( \!"" || char(column(ColNr)<< Get Name()) || " RMSE\!") * Random Normal()";
//But when putting this in a column formula equation, the parser stops parsing after the second repeat of the column name. In an ideal world I would just refer to the table variable directly.
eval(parse( "dt<<NEW column=""></NEW>
Eval(Parse()) 메서드는 복잡한 열 이름을 쉽게 처리할 수 있습니다. 그러한 문제가 존재할 수 있음을 인식하기만 하면 됩니다. 다음은 간단한 예입니다.
Names Default to here(1);
dt = New Table( "big class",
Add Rows( 40 ),
New Column(
"Complex column a+7/(1_2)",
Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Values(
[59, 61, 55, 66, 52, 60, 61, 51, 60, 61, 56, 65, 63, 58, 59, 61, 62, 65, 63,
62, 63, 64, 65, 64, 68, 64, 69, 62, 64, 67, 65, 66, 62, 66, 65, 60, 68, 62,
68, 70]
)
),
New Column(
"weight",
Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Values(
[95, 123, 74, 145, 64, 84, 128, 79, 112, 107, 67, 98, 105, 95, 79, 81, 91,
142, 84, 85, 93, 99, 119, 92, 112, 99, 113, 92, 112, 128, 111, 105, 104,
106, 112, 115, 128, 116, 134, 172]
)
)
);
col names = dt<<GET column="" names=""></GET>
parse(eval()) 메서드가 테이블 변수 또는 열 이름의 이름에서 ()를 잘 처리하지 못하기 때문에 여전히 더 강력한 솔루션을 찾고 있습니다.
알겠어요. 즉석에서 열 이름을 생성하므로 사용할 수 있는 몇 가지 전략이 있습니다.
첫 번째는 런타임에 생성하는 열 이름 목록에 "substitute into()" 명령 몇 개를 사용하는 것입니다. 이것은 일반적으로 대부분의 경우 잘 작동합니다.
두 번째로 Eval(Parse()) 메서드를 사용할 수 있습니다. 여기서 연결 명령을 사용하여 프로그래밍 방식으로 JSL의 문자열을 빌드합니다. 이것은 내 은총알입니다. 특히 열 속성 및 조작과 관련된 항목이 있습니다. 스크립트는 기본적으로 완료된 명령을 문자열로 "입력"하고 이를 표현식으로 변환하기 때문에 모든 추가 Eval() 명령이 필요하지 않습니다. 그런 다음 식을 실행하면 됩니다.Re: JSL: 열 수식 내에서 테이블 변수에 대한 참조를 만드는 방법문제는 열 수와 해당 열의 이름을 알 수 없기 때문에 열 수식에서 테이블 변수 이름을 하드코딩할 수 없다는 것입니다. 테이블 변수를 생성할 수 있습니다. 열 수식에서 참조하는 것은 어려운 부분입니다.Re: JSL: 열 수식 내에서 테이블 변수에 대한 참조를 만드는 방법테이블 변수를 생성하여 시작합니다.
dt << New Table Variable("RMSE_1", 30);
새 수식 열을 생성하기 전에 루프의 일부로 이 작업을 수행할 수 있습니다.
그런 다음 테이블 변수는 열과 유사하게 위에서 참조됩니다.
// Add the table variable
dt << New Table Variable( "RMSE_1", 30 );
// Add the column referencing the table variable
dt << New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( :RMSE_1 ^ 2 )
);
최상의,
중