Toma cada elemento de la lista y conviértelo en una lista vacía usando un bucle forHola ,
¿Cómo puedo crear un nombre de variable y asignarlo como una lista vacía usando un bucle for?
Por ejemplo:
var_list = {"día", "hoy" ,"lluvia", "media"};
Al recorrer la lista var_list se obtendrá:
día = {};
hoy={};
lluvia={};
media={};
Automatización y scriptingRe: convertir cada elemento de una lista en una lista vacía mediante un bucle forNo hagas eso. Te sugiero crearlas como claves para una matriz asociativa y asignarles una lista vacía como valor.
Names Default To Here(1);
var_list = {"day", "today", "rain", "mean"};
aa = Associative Array(var_list, Repeat({{}}, N Items(var_list)));Re: convertir cada elemento de la lista en una lista vacía mediante un bucle for¿Alguna razón negativa por la que no utilizar el bucle for para hacer eso?
Además, quiero realizar cálculos posteriores y añadir un valor al array asociativo. Después, convierto el array asociativo en una tabla. A continuación, se muestra un ejemplo de cómo lo hago. El valor de aa es correcto con {{}, {}, {"3", "2"}, {"A", "b"}}, pero la tabla creada solo tiene valor en :rain. Creo que se debe a que el tipo de dato de columna predeterminado de JMP es numérico+continuo.
1) ¿Existe una forma mejor/más rápida o una forma forzada de convertir una matriz asociativa en una tabla sin la necesidad de definir el tipo de datos de la columna?
keys = aa << get keys;
check= {"col_today", "col_rain"};
col_today = {"A", "b"};
col_rain = {"3","2"};
for (j=1, j<=nitems(check), j++,
for (i=1, i<=nitems(keys), i++,
if(word(-1, check[j], "_") == keys[i],
aa << Insert(keys[i],eval(parse(check[j])));
);
);
);
values1 = aa << get values;
tb = new table();
for (i = 1, i <= nitems(keys), i++,
tb << new column(char(keys[i]), , set values(values1[i]));
)
missing :today value because it is character
Re: convertir cada elemento de la lista en una lista vacía mediante un bucle forIntentar trabajar con nombres de variables creados dinámicamente tiende a ser un desastre y existen estructuras de datos que ayudan con este tipo de scripts para que no tenga que depender de nombres de variables dinámicos.
Una opción es pasar por JSON y dejar que JMP decida los tipos de datos/modelados.
Names Default To Here(1);
aa = Associative Array();
aa["a"] = {"A", "B"};
aa["b"] = {"1", "2"};
aa["c"] = {1, 2};
dt = JSON To Data Table(As JSON Expr(aa), Guess(Stack(1)));
O bien crear todas las columnas y caracteres y luego convertir aquellos que se puedan convertir a numéricos.
Re: convertir cada elemento de la lista en una lista vacía mediante un bucle forEstoy de acuerdo con el aporte de Jarmo, pero creo que esto hace lo que pides:
Names Default To Here( 1 );
var_list = {"day", "today", "rain", "mean"};
var_list_list = {};
For Each( {var, i}, var_list, Insert Into( var_list_list, Parse( Eval Insert( "^var^ = {};" ) ) ) );
var_list_list;Re: convertir cada elemento de la lista en una lista vacía mediante un bucle forCreo que quizás tengas que agregar Eval List(var_list_list); para inicializar las variables una vez.
Considero que hacer algo así es una idea tan mala que ni siquiera quiero dar una opción para ello, pero aún así... aquí hay una.
Ver más...
Names Default To Here(1);
var_list = {"day", "today", "rain", "mean"};
For Each({var, i}, var_list,
Eval(EvalExpr(Assign(Expr(Parse(var)), {})));
);
show(day, today, rain, mean);