Mesa de construcción con JSL, problema con "Nueva columna"Hola,
Estoy tratando de construir una tabla en JSL a partir de un archivo de datos utilizando la primera línea de datos del archivo para determinar el tipo de datos. Sin embargo, no puedo crear nuevas columnas en la secuencia de comandos con tipos que no sean Numérico. Esto funciona:
dt << New Column("test", Character, Nominal)Sin embargo, esto (ejemplo simplificado) solo genera columnas numéricas:
cols = {"A", "B", "C"};
type = {};
For(i = 1, i <= N Items(cols), i = i + 1,
type[i] = Match(cols[i],
"A", Expr(Character),
Expr(Numeric);
);
);
For(i = 1, i <= N Items(cols), i = i + 1,
dt << New Column(cols[i], Eval(type[i]), Nominal);
);El comportamiento esperado sería crear una columna de Carácter y dos Numéricos. ¿Qué hace que el tipo de expresión [i] se ignore aquí?
Re: Construyendo tabla con JSL, problema con "Nueva columna"Algunos elementos dentro de una función New Column () no se evalúan cuando se analizan y, por lo tanto, requieren que sean declaraciones JSL completas cuando se procesan. La función Substitute () le permite a uno hacer eso. Aquí está el código que usaría para hacer lo que está haciendo:
dt = New Table( "Example" );
cols = {"A", "B", "C"};
type = {};
For( i = 1, i <= N Items( cols ), i = i + 1,
Eval(
Substitute(
Expr(
dt << New Column( cols[i], __type__, Nominal )
),
Expr( __type__ ), Match( cols[i], "A", Expr( Character ), Expr( Numeric ) )
)
)
);Re: Construyendo tabla con JSL, problema con "Nueva columna"¡Funciona! Extendiendo esto puedes hacer
Eval(
Substitute(
Expr(dt << New Column(__cols__, __type__, ...)),
Expr(__cols__), cols[i],
Expr(__type__), type[i],
...
);
);
¡Gracias!