Salut tout le monde,
Je souhaite ajouter en continu des lignes à une table de données vide jusqu'à ce qu'une condition soit remplie, mais je ne sais pas quoi faire.
Dans l'exemple suivant, la condition est de savoir si tous les éléments du vecteur en "état stable" sont des uns.
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 et init_state sont des matrices lues à partir d'une table de données. Les valeurs de ligne dans X(n) sont la multiplication des dernières valeurs de ligne et de P. Les valeurs dans la colonne "état stable" sont des vecteurs composés de zéros et de uns, indiquant si les éléments de deux vecteurs X(n) adjacents sont égaux ou non. Je veux ajouter des lignes à cette table de données jusqu'à ce que le vecteur en "état stable" soit composé de tous (c'est-à-dire que les deux vecteurs adjacents dans X(n) sont complètement égaux).
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 );
)
Une autre question est que j'ajoute la commande "show(cols[rownum])" pour vérifier si la valeur sélectionnée est correcte mais elle affiche Empty()... Est-ce parce que puisque toutes les valeurs ne sont pas ajoutées au tableau en premier lieu, je ne peux donc pas m'y référer? Si oui, comment puis-je vérifier l'état?
J'apprécierais grandement toute aide!
Pas grave. J'ai trouvé l'ajout de "Formules de réexécution ;" peut résoudre le problème. Merci!
Merci beaucoup! Ça marche!
J'ai toujours du mal à obtenir la valeur de la cellule dans la dernière ligne des colonnes. Comme mentionné, il affiche "Empty ()" dans la fenêtre du journal. Je suppose que le problème est que ces valeurs sont attribuées à l'aide de formules, elles sont donc Empty () lorsque j'ai essayé d'y accéder. Quels scripts dois-je utiliser pour obtenir les valeurs de ces cellules ?
Concernant l'ajout de lignes, je suppose que tout ce que vous avez à faire est d'ajouter
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 );
)