Preparando los nombres de las columnas de la lista para uso futuroHola, estoy tratando de recuperar y preparar una lista de nombres de columnas para guardar en una variable para usar más tarde. El problema es que << Get Column Names() devuelve todo como una lista de cadenas. A continuación se muestra cómo he agregado un ":" al comienzo de cada cadena de elementos y cuál puede ser el uso potencial de esto. Aún queda mucho por hacer.
names default to here(1);
dt = current data table();
col_names = dt << Get Column Names( ); // retrieves all col names
col_list = {}; // list for holding col names
// loop formats names in way usable to be called on as cols, not strings
for( i = 1 , i <= N items( col_names ), i++,
list_item = ":" || list_item;
Insert Into( col_list, list_item );
);
dt << Ungroup Scripts( col_list ); // example usageOtro ejemplo sería el uso de esta lista en algo como:
Ajustar modelo (Y (col_list) ....
Lo que obtengo: { "ColA", "ColB" }
Lo que quiero: { :ColA, :ColB }
He buscado y encontrado varios hilos relacionados con esto, pero el uso de los nombres de las columnas como entrada para una función es algo con lo que no me topé.¿Algún consejo?
Analíticasecuencias de comandosventanasRe: Preparando los nombres de las columnas de la lista para uso futuroHola,
Tuve el mismo problema hace un tiempo. La solución es simple: debe evaluar la lista para devolver la serie de columnas.
dt << Ungroup Scripts( Eval (col_list ));
Mejor,
TS
Re: Preparando los nombres de las columnas de la lista para uso futuroSi desea utilizar columnas formateadas como :colname, puede obtenerlas, por ejemplo, con algo como esto:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = dt << Get Column Names(Continuous, "String");
// dt << Get Column Reference(); /* all references */
/* one option */
col_list1 = dt << Get Column Reference(col_names);
/* second option */
col_list2 = Transform Each({col_name}, col_names,
Name Expr(AsColumn(Column(dt, col_name))); /* Column() isnt necessary but makes it more robust */
);
show(col_list1, col_list2);
Por lo general, los uso como cadenas y luego uso Column() o As Column() según la situación (con algo de Name Expr() en la mezcla).
Muy a menudo, usar una lista de cadenas de nombres de columna es suficiente si lo combina con Eval().
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
col_names = {"OZONE", "CO", "SO2", "NO", "PM10"};
//obj = dt << Cluster Variables(Y(:OZONE, :CO, :SO2, :NO, :PM10));
obj = dt << Cluster Variables(Y(Eval(col_names)));
col_list = Transform Each({col_name}, col_names,
Name Expr(AsColumn(Column(dt, col_name)));
);
obj = dt << Cluster Variables(Y(col_list)); /* wont work, see log for error */
/* Using Eval() and Eval Expr() */
cv_expr = EvalExpr(
obj = dt << Cluster Variables(Y(Expr(col_list)));
);
Eval(cv_expr);
/* using only Eval inside Y() should also work like earlier */
obj = dt << Cluster Variables(Y(Eval(col_list)));
Re: Preparando los nombres de las columnas de la lista para uso futuro@Thierry_S & @jthi - ¡gracias a los dos! ¡eval() era lo que estaba buscando! Comprendí que la columna era una expresión, pero me olvidé por completo de este comando.