J'essaie de créer une nouvelle colonne de formule à l'aide de variables calculées plus tôt dans le script, mais la formule n'aime pas la manière dont les variables sont définies. Lorsque j'ouvre la formule (après la création de la table de données), l'erreur suivante apparaît: "Ce nom existe dans le contexte actuel mais n'est pas défini localement dans la formule."
//Checks the calibration accuracy
current data table(dt_1C_comparison);
Avg_1C_grab = :"New Diff." << get values;
Avg_1C_diff = mean(Avg_1C_grab);
show(Avg_1C_diff);
offsetadjust_1Cpos = Avg_1C_diff - 0.3;
offsetadjust_1Cneg = Avg_1C_diff + 0.3;
x1C = If(
(Avg_1C_diff > 0.3), offsetadjust_1Cpos,
(Avg_1C_diff < -0.3), offsetadjust_1Cneg,
Avg_1C_diff = 0,
);
current data table(dt_1C_comparison);
//Caclulates new offset if the wet/dry difference is greater then 0.3
Offset_1C = Mean1C_intercept - x1C;
Show(Offset_1C);
New Column("Wet Avg. 2", numeric, "continuous", Format("Best", 5), Formula(:"Average of Meas. Position=TopDRY" * Slope_1C + Offset_1C));
Toute aide serait grandement appréciée!
Le problème est votre construction de la formule. La façon dont vous le définissez, la formule sera stockée exactement comme vous le créez:
:"Average of Meas. Position=TopDRY" * Slope_1C + Offset_1C
Lorsque la formule est exécutée, des variables JSL appelées Slope_1C et Offset_1C seront recherchées. Il m'est difficile d'imaginer que si vous enregistrez la table de données, puis ultérieurement, démarrez une session JMP et ouvrez cette table de données, il existera des variables JSL avec les noms actuellement disponibles dans votre JMP session. Vous devez donc remplacer les références de variable par les valeurs réelles des variables JSL, quelque chose comme:
:"Average of Meas. Position=TopDRY" * .5 + 3.2
Je suis en train de créer les valeurs pour Slope_1C et Offset_1C comme étant respectivement 0,5 et 3,2.
Pour ce faire, la méthode la plus simple consiste à utiliser la fonction Substitute (). Voici votre script modifié pour substituer dans votre formule les valeurs actuelles réelles des variables JSL.
//Checks the calibration accuracy
Current Data Table( dt_1C_comparison );
Avg_1C_grab = :"New Diff." << get values;
Avg_1C_diff = Mean( Avg_1C_grab );
Show( Avg_1C_diff );
offsetadjust_1Cpos = Avg_1C_diff - 0.3;
offsetadjust_1Cneg = Avg_1C_diff + 0.3;
x1C = If(
(Avg_1C_diff > 0.3), offsetadjust_1Cpos,
(Avg_1C_diff < -0.3), offsetadjust_1Cneg,
Avg_1C_diff = 0,
);
Current Data Table( dt_1C_comparison );
//Caclulates new offset if the wet/dry difference is greater then 0.3
Offset_1C = Mean1C_intercept - x1C;
Show( Offset_1C );
Eval(
Substitute(
Expr(
New Column( "Wet Avg. 2",
numeric,
"continuous",
Format( "Best", 5 ),
Formula( :Name("Average of Meas. Position=TopDRY") * __Slope_1C__ + __Offset_1C__ )
)
),
Expr( __Slope_1C__ ), Slope_1C,
Expr( __Offset_1C__ ), Offset_1C
)
);
Merci cela a fonctionné!
Il y a quelques points dans mon script où je calcule de nouvelles colonnes en fonction de variables calculées précédemment dans mon script, similaires à la méthode de mon message original. Devrais-je utiliser utiliser thisEval (Substitute (pour toutes les colonnes que je calcule (s'il contient des variables))?