모두 안녕
조건이 충족될 때까지 빈 데이터 테이블에 계속해서 행을 추가하고 싶은데 어떻게 해야 할지 모르겠습니다.
다음 예에서 조건은 "정상 상태"의 벡터에 있는 모든 요소가 1인지 여부입니다.
ret = New Table( title,
New Column( "P", Numeric, "Continuous", Formula( ptable << get as matrix ) ),
New Column( "X(n)",
Expression,
"None",
Formula( If( Row() == 1, init_state, Lag( :Name( "X(n)" ), 1 ) * :p</img> ) ),
Set Selected,
),
New Column( "steady state",
Expression,
"None",
Formula( :Name( "X(n)" ) - Lag( :Name( "X(n)" ) ) == zeros ),
),
New Column( "States", Character, Values( names ) ),
);
P 및 init_state는 데이터 테이블에서 읽은 행렬입니다. X(n)의 행 값은 마지막 행 값과 P의 곱입니다. "정상 상태" 열의 값은 0과 1로 구성된 벡터로, 인접한 두 X(n) 벡터의 요소가 같은지 여부를 나타냅니다. "정상 상태"의 벡터가 모두 1로 구성될 때까지(즉, X(n)의 두 인접 벡터가 완전히 동일할 때까지) 이 데이터 테이블에 행을 추가하려고 합니다.
rownum = N Rows( ret );
cols = Column( ret, "steady state" );
ones = J( 1, vectorlength, 1 );
While((!vectorEqual(cols[rownum],ones)),
// add rows here, not sure how
rownum = N Rows( ret );
)
또 다른 질문은 선택한 값이 올바른지 확인하기 위해 "show(cols[rownum])" 명령을 추가했지만 Empty()가 표시된다는 것입니다... 애초에 모든 값이 테이블에 추가되지 않아서 참조할 수 없기 때문인가요? 그렇다면 상태를 어떻게 확인할 수 있습니까?
도움을 주시면 감사하겠습니다!
괜찮아요. "Rerun Formulas"를 추가하는 것을 발견했습니다. 문제를 해결할 수 있습니다. 감사합니다!
매우 감사합니다! 효과가있다!
열의 마지막 행에서 셀 값을 가져오는 데 여전히 문제가 있습니다. 언급했듯이 로그 창에 "Empty()"가 표시됩니다. 문제는 해당 값이 수식을 사용하여 할당되어 액세스하려고 할 때 Empty()라는 것입니다. 해당 셀의 값을 가져오려면 어떤 스크립트를 사용해야 합니까?
행 추가에 관해서는 추가하기만 하면 된다고 가정합니다.
rownum = N Rows( ret );
cols = Column( ret, "steady state" );
ones = J( 1, vectorlength, 1 );
While((!vectorEqual(cols[rownum],ones)),
ret << add rows(1);
dt << Rerun Formulas;
rownum = N Rows( ret );
)