Lista de expresionesMe gustaría construir una lista que se vea así.
LL = {parámetro1 = "x", valor1 = 5, parámetro2 = "y", valor2 = 3, ...}
La longitud puede variar, así que lo hago en un bucle y trato de usar el índice de bucle en el nombre de la variable.
Pero tengo dificultades para crear ese término (por ejemplo, parm1).
¿Cuál es la mejor manera de hacer esto?
Re: Lista de expresionesAquí hay otra forma de hacerlo. Similar a su solución final.
// LL = {parm1 = "x", value1 = 5, parm2 = "y", value2 = 3, ...}
// Assume parameters and value labels are sequential
parm_list = {"x", "y", "z"};
value_list = {5, 3, 1};
pval_list = {};
for (i = 1, i <= nitems(parm_list), i++,
one_parm = evalinsert("\[parm^i^ = "^parm_list[i]^"]\");
one_val = evalinsert("\[value^i^ = ^value_list[i]^]\");
insertinto(pval_list, parse(one_parm));
insertinto(pval_list, parse(one_val));
);
pval_list;Re: Lista de expresionesRealmente me parece que podría hacer una lista de matrices asociativas o matrices asociativas anidadas si lo desea. Entonces no tiene que analizar cadenas para crear su estructura de datos y lo encuentro MUCHO más fácil de leer (cuando analiza cadenas para crear variables, pierde la capacidad de simplemente ejecutarlas o pasar el mouse sobre ellas para verlas). )
Names Default to here(1);
testparam1 = 1;
fitparam1 = 2;
Rsq1 = 3;
testparam2 = 4;
fitparam2 = 5;
Rsq2 = 6;
//list of associative arrays
Laa = {};
//param1 insert
insert into(Laa, associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam1, fitparam1, Rsq1})) );
//param2 insert
insert into(Laa, associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam2, fitparam2, Rsq2})) );
show(Laa[1]["TestParam"], Laa[2]["TestParam"]);
//nested associative arrays
Naa = associative array();
//param1 insert
Naa["name1"] = associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam1, fitparam1, Rsq1}));
//param2 insert
Naa["name2"] = associative array({"TestParam", "FitParam", "Rsq"}, Evallist({testparam2, fitparam2, Rsq2}));
show(Naa["name1"]["FitParam"], Naa["name2"]["FitParam"]);
devoluciones
Laa[1]["TestParam"] = 1;
Laa[2]["TestParam"] = 4;
Naa["nombre1"]["FitParam"] = 2;
Naa["nombre2"]["FitParam"] = 5;
el beneficio de anidado realmente solo es si espera que el orden cambie y la posición sea importante.
Re: Lista de expresionesNo voy a calificar cuál es mejor.Pero encontré ambos ejemplos útiles para entender cómo funciona todo.
Al final, mi código se veía así.Nota: esto no funcionará como está ya que no defino algunas cosas aquí.
Esto está en un bucle con índice k.Una lista de lista almacena todos los resultados.
LLista = {};
Insertar en (LLista, Analizar gramaticalmente ( "Parámetro de prueba" || carbonizarse (k)|| "=\!"" ||Modos[k]|| "\!"" )); // Nombre del parámetro de prueba
Insertar en (LLista, Analizar gramaticalmente ( "FitParam" || carbonizarse (k)|| "=\!"" ||dtEstadísticas[ 1 , 1 ]|| "\!"" )); // Ajustar nombre de parámetro
Insertar en (LLista, Analizar gramaticalmente ( "Rsq" || carbonizarse (k)|| "=" || carbonizarse (dtEstadísticas[ 1 , 3 ]))); // R-cuadrado
Re: Lista de expresiones¿La mejor manera?" ¿Estás tratando de iniciar una pelea en la comunidad JMP?
Hay más de una manera de resolver este problema. La decisión sobre cuál es el mejor camino depende de varios criterios. Aquí hay otra solución candidata que es diferente de la solución de Jim pero no necesariamente mejor.
Names Default To Here( 1 );
// List the variable names
name list = { "Cool", "Awesome", "Bad" };
// List the variable values
value list = { 1, 2, 3 };
// Prepare an empty container for assignments
name value list = {};
// Make the list of assignments
For( i = 1, i <= N Items( name list ), i++,
// Start with function with no arguments
assign expr = Expr( Assign() );
// Add first argument
Insert Into( assign expr, name list[i] );
// Add second argument
Insert Into( assign expr, value list[i] );
// Add function to assignment list
Insert Into( name value list, Name Expr( assign expr ) );
);
Show( name value list );
Ahora tienes una opción. (Apuesto a que tienes otro en cualquier momento). Tú eliges.
Re: Lista de expresionesAquí hay una pieza de código similar para generar una lista.
Names Default To Here( 1 );
dt = New Table( "Untitled 36", Add Rows( 3 ),
New Column( "Column 1", Character, "Nominal",
Set Values( {"1", "2", "3"} ) ) );
NamesList = {"Cool", "Awsome", "Bad"};
ValuesList = Column( dt, 1 ) << get values;
NamesValuesList = {};
// Build the Value Labels List
For( i = 1, i <= N Items( NamesList ), i++,
Insert Into( namesvalueslist,
Parse( ValuesList[i] || " = \!"" || NamesList[i] || "\!"" ) )
);