Hola a todos,
Quiero agregar continuamente filas a una tabla de datos vacía hasta que se cumpla una condición, pero no estoy seguro de qué hacer.
En el siguiente ejemplo, la condición es si todos los elementos del vector en "estado estable" son unos.
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 son matrices leídas de una tabla de datos. Los valores de fila en X(n) son el multiplicador de los valores de la última fila y P. Los valores en la columna "estado estacionario" son vectores que constan de ceros y unos, que representan si los elementos en dos vectores X(n) adyacentes son iguales o no. Quiero agregar filas a esta tabla de datos hasta que el vector en "estado estable" consista en todos unos (es decir, los dos vectores adyacentes en X(n) son completamente iguales).
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 );
)
Otra pregunta es que agrego el comando "show(cols[rownum])" para verificar si el valor seleccionado es correcto pero muestra Vacío()... ¿Es porque, dado que todos los valores no se agregan a la tabla en primer lugar, no puedo referirme a ellos? Si es así, ¿cómo puedo verificar la condición?
Agradecería mucho cualquier ayuda!
No importa. Encontré agregando "Reejecutar fórmulas"; puede resolver el problema. ¡Gracias!
¡Muchas gracias! ¡funciona!
Todavía tengo problemas para obtener el valor de la celda en la última fila de las columnas. Como se mencionó, muestra "Vacío ()" en la ventana de registro. Supongo que el problema es que esos valores se asignan mediante fórmulas, por lo que están vacíos () cuando traté de acceder a ellos. ¿Qué scripts debo usar para obtener los valores de esas celdas?
Con respecto a la adición de filas, supongo que todo lo que necesita hacer es agregar
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 );
)