Bonjour, j'écris un script pour automatiser mes manipulations de table (principalement en ajoutant de nouvelles colonnes avec des formules de correspondance) pour les données avec un nombre variable de contenus de colonnes uniques et de sorties finales.
J'ai écrit un script pour identifier le contenu unique dans :SampleID (enregistré dans Init_IDs) et invité l'utilisateur à les renommer dans une fenêtre contextuelle qui enregistre dans New_IDs, je peux ensuite créer ma nouvelle colonne avec une formule de correspondance standard :
New Column( "Sample",
Character,
Nominal,
Formula(
Match( :SampleID,
"C1", "Constant 1",
"C2", "Constant 2",
Init_IDs[1], New_IDs[1],
Init_IDs[2], New_IDs[2],
Init_IDs[3], New_IDs[3],
Init_IDs[4], New_IDs[4],
Init_IDs[5], New_IDs[5],
Init_IDs[6], New_IDs[6],
)
)
);Cette formule fonctionne pour mon ensemble de données de test où la taille de New_IDs était de 6 mais cela changera donc j'aimerais utiliser une boucle For pour la rendre flexible, c'est ce que j'ai essayé mais cela ne fonctionne pas :
New Column( "Sample",
Character,
Nominal,
Formula(
Match( :SampleID,
"C1", "Constant 1",
"C2", "Constant 2",
) +
For( i = 1, i <= N Items( New_IDs ), i++,
Match( :SampleID,
Init_IDs[i], New_IDs[i],
)
)
),
);J'ai vérifié que N Items (New_IDs) génère la valeur 6. J'ai essayé la boucle For seule sans la combinaison avec l'autre formule de correspondance et cela ne fonctionne pas non plus, donc bien que le '+' entre les deux puisse finalement être un problème, le problème principal semble être ma boucle for elle-même.
J'ai également essayé de simplifier avec une instruction If au lieu d'une formule Match, pas de chance non plus:
New Column( "Sample",
Character,
Nominal,
Formula(
For( i = 1, i <= 6, i++,
If( :SampleID == Init_IDs[i],
New_IDs[i]
)
)
)
);Mon collègue m'a aidé et a trouvé ça, ça marche parfaitement ! Encore faut-il étudier pourquoi mes tentatives précédentes n'ont pas fonctionné...
New Column( "Sample",
Character,
Nominal,
Formula(
If(Contains(Init_IDs, :SampleID), New_IDs[Contains(Init_IDs, :SampleID)],
Match(:SampleID,
"C1", "Constant 1",
"C2", "Constant 2",
)
)
),
);