Ciao a tutti,
Voglio aggiungere continuamente righe a una tabella di dati vuota fino a quando non viene soddisfatta una condizione, ma non sono sicuro di cosa fare.
Nell'esempio seguente, la condizione è se tutti gli elementi nel vettore in "stato stazionario" sono uno.
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 e init_state sono matrici lette da una tabella di dati. I valori di riga in X(n) sono il moltiplicatore degli ultimi valori di riga e P. I valori nella colonna "stato stazionario" sono vettori costituiti da zeri e uno, che rappresentano se gli elementi in due vettori X(n) adiacenti sono uguali o meno. Voglio aggiungere righe a questa tabella di dati fino a quando il vettore in "stato stazionario" è composto da tutti quelli (cioè i due vettori adiacenti in X (n) sono completamente uguali).
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 );
)
Un'altra domanda è che aggiungo il comando "show(cols[rownum])" per verificare se il valore selezionato è corretto ma mostra Empty()... È perché dal momento che tutti i valori non vengono aggiunti alla tabella in primo luogo, quindi non posso fare riferimento a loro? In tal caso, come posso verificare la condizione?
Apprezzerei davvero qualsiasi aiuto disponibile!
Non importa. Ho trovato l'aggiunta di "Formule di ripetizione"; può risolvere il problema. Grazie!
Grazie mille! funziona!
Ho ancora problemi a ottenere il valore della cella nell'ultima riga delle colonne. Come accennato, mostra "Empty ()" nella finestra Log. Immagino che il problema sia che quei valori sono assegnati usando le formule, quindi sono Empty() quando ho provato ad accedervi. Quali script dovrei usare per ottenere i valori di quelle celle?
Per quanto riguarda l'aggiunta di righe, presumo che tutto ciò che devi fare sia aggiungere
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 );
)