Comment insérer une référence à un nom de variable de table généré dynamiquement dans une formule de colonne de manière à pouvoir modifier ultérieurement la variable de table tout en conservant la mise à jour des valeurs de colonne. Et puis faites cela pour un nombre inconnu de colonnes.
dt = Current Data Table();
NewCol = function({ColNr},
//Set a name table variable with the name of the column and RMSE appended to it
dt << Set Table Variable( concat(Column(ColNr)<< Get Name(),"RMSE"), 0 );
//Create a new column with the same name as the original column but with " with RMSE" at the end.
//Place a formula in this column which takes the original column value and add random RMSE as specified by the table variable to it.
Eval(
substitute(
expr(
dt<<NEW column=""></NEW>
Merci de m'avoir défié, j'ai essayé encore une fois et j'ai résolu le problème 
Vous avez raison, la création du nom de la colonne fonctionne bien. Cela ne fonctionne pas pour créer la partie formule de la nouvelle expression de colonne.
Ce que j'avais à faire est de mettre :Name( "...") autour des noms de variables de colonne et de table dans la fonction d'analyse.
dt = New Table( "Untitled 9",
Add Rows( 0 ),
New Column( "Pred Formula Thickness (A)",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[-1.09815926721176, -0.143977108758327, -1.60078929360768,
-0.340409665497429, -0.581215173360104, 0.233876291958488,
-0.357108531367114, 0.0704280592629584, 1.86236889119533,
0.669812241478143, -0.00962200322380528, 1.33041117732878,
0.533367791752501, 2.24183743599671, -0.506060621538248]
),
Set Display Width( 145 )
)
);
ColNr = 1;
//Create the table variable based on the column name with RMSE added to it.
dt << Set Table Variable( concat(column(ColNr)<< Get Name()," RMSE"), 0 );
//Create the text for the column formula. Notice that the formula stored in test is correct. It is the 'column name' + 'the table variable' multiplied with random normal.
test = ":Name( \!"" || char(column(ColNr)<< Get Name()) || "\!") + :Name( \!"" || char(column(ColNr)<< Get Name()) || " RMSE\!") * Random Normal()";
//But when putting this in a column formula equation, the parser stops parsing after the second repeat of the column name. In an ideal world I would just refer to the table variable directly.
eval(parse( "dt<<NEW column=""></NEW>
La méthode Eval(Parse()) peut facilement gérer des noms de colonnes complexes. Vous devez juste reconnaître que de tels problèmes peuvent exister. Voici un exemple simple
Names Default to here(1);
dt = New Table( "big class",
Add Rows( 40 ),
New Column(
"Complex column a+7/(1_2)",
Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Values(
[59, 61, 55, 66, 52, 60, 61, 51, 60, 61, 56, 65, 63, 58, 59, 61, 62, 65, 63,
62, 63, 64, 65, 64, 68, 64, 69, 62, 64, 67, 65, 66, 62, 66, 65, 60, 68, 62,
68, 70]
)
),
New Column(
"weight",
Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Values(
[95, 123, 74, 145, 64, 84, 128, 79, 112, 107, 67, 98, 105, 95, 79, 81, 91,
142, 84, 85, 93, 99, 119, 92, 112, 99, 113, 92, 112, 128, 111, 105, 104,
106, 112, 115, 128, 116, 134, 172]
)
)
);
col names = dt<<GET column="" names=""></GET>
Je cherche toujours une solution plus robuste car la méthode parse(eval()) ne gère pas bien () dans le nom de la variable de table ou le nom de la colonne.
Oh je vois. Puisque vous générez les noms de colonne à la volée, vous pouvez utiliser plusieurs stratégies.
La première consiste simplement à utiliser quelques commandes "substitute into()" sur une liste de noms de colonnes que vous générez au moment de l'exécution. Cela fonctionnera généralement bien dans la plupart des cas.
Deuxièmement, vous pouvez utiliser la méthode Eval(Parse()) , où vous créez une chaîne de votre JSL par programmation à l'aide de commandes de concaténation. C'est ma solution miracle. En particulier avec des éléments liés aux propriétés et à la manipulation des colonnes. Cela supprime le besoin de toutes les commandes Eval() supplémentaires car le script "tape" essentiellement la commande terminée sous forme de chaîne et la convertit en une expression. Ensuite, vous exécutez simplement l'expression.Re : JSL : comment créer une référence à une variable de table dans une formule de colonneLe problème est que je ne peux pas coder en dur les noms des variables de table dans la formule de colonne car le nombre de colonnes ainsi que les noms de ces colonnes sont inconnus. La création des variables de table est faisable. Les référencer dans la formule de la colonne est la partie la plus difficile.Re : JSL : comment créer une référence à une variable de table dans une formule de colonneVous commencerez par générer vos variables de table :
dt << New Table Variable("RMSE_1", 30);
Vous feriez probablement cela dans le cadre de votre boucle avant de générer la nouvelle colonne de formules.
Après cela, une variable de table est référencée de la même manière que les colonnes, donc d'en haut :
// Add the table variable
dt << New Table Variable( "RMSE_1", 30 );
// Add the column referencing the table variable
dt << New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( :RMSE_1 ^ 2 )
);
meilleur,
M