Chaîne d'analyse contenant le symbole "*" sans créer d'espaces supplémentairesBonjour,
Je programme par itération à travers deux tableaux pour créer une variable chaîne qui peut être analysée et évaluée pour ajuster automatiquement un modèle aux données.
Le problème que je rencontre est que les en-têtes de colonne sont nommés "DL * 15".
Par conséquent, lorsque je tente d'analyser et d'évaluer ": DL * 15", une erreur se produit car l'analyse crée: DL * 15. L'espace supplémentaire invalide l'évaluation, car la colonne est nommée: DL * 15 pas: DL * 15.
Un exemple de ce qui se passe est présenté ci-dessous:

Existe-t-il un moyen d’empêcher l’espacement lors de l’analyse de "DL * 15"?
Je vous remercie,
Nate
Re: Chaîne d'analyse avec le symbole "*" dedans sans créer d'espaces supplémentairesle wrapper de nom entoure le nom complet, pas seulement le caractère qui fait en sorte que le nom ressemble à une expression.
Ou...
Il existe d'autres moyens de créer des expressions comme celle-ci, en utilisant les fonctions de gestion des expressions pour manipuler les expressions directement plutôt qu'en utilisant des chaînes et en les analysant en expressions. Si votre table avait une colonne avec le nom " sin (a) * cos (b) "tu pourrais faire ça
ex = expr(
Fit Model(
Y( YVARIABLEPLACEHOLDER ),
Effects( :age, :sex, :height ),
Personality( "Standard Least Squares" ),
Emphasis( "Effect Leverage" ),
Run(
:weight << {Plot Actual by Predicted( 1 ), Plot Regression( 0 ),
Plot Residual by Predicted( 1 ), Plot Effect Leverage( 1 )}
)
)
);
substituteInto( ex, expr(YVARIABLEPLACEHOLDER), asName("sin(a)"||"*"||"cos(b)") );
show(ex);
ex = modèle d'ajustement (Y ( Nom ("sin (a) * cos (b)") ), Effets (: âge,: sexe,: taille), Personnalité ("Moindres carrés standard"), Accentuation ("Effet de levier"), Courir (: poids << {Parcelle réelle prédite (1), Régression parcelle (0 ), Résidu de parcelle par prédite (1), effet de levier de la parcelle (1)}));
SubstituteInto recherche le second argument dans le premier argument et le remplace par le troisième argument. AsName convertit une chaîne en un nom. La fonction expr () permet de passer une expression sans l’évaluer au préalable.
Vous verrez souvent le wrapper Name () si vous nommez des colonnes comme ceci
Re: Chaîne d'analyse avec le symbole "*" dedans sans créer d'espaces supplémentairesQuelques notes sur ma réponse:
le "\ [... ] \ " construct vous permet de mettre n'importe quoi entre les guillemets, encore plus de guillemets.
evalinsert substitue des valeurs aux variables entourées par le caractère ^.
Re: Chaîne d'analyse avec le symbole "*" dedans sans créer d'espaces supplémentairesVous ne pouvez pas mélanger: D et: nom.
Essayez quelque chose comme ça:
fitmodelstring = fitmodelstring || evalinsert("\[Y(:name("D^a[i]^ * ^b[j]^"), Efffects(]\");
Re: Chaîne d'analyse avec le symbole "*" dedans sans créer d'espaces supplémentairesJ'ai dit qu'il était résolu un peu trop tôt.
J'ai essayé le code, mais cela ne fonctionne pas dans le contexte plus complexe de ma situation, où je parcourt deux tableaux.
Sans écrire tout le code, cela ne fonctionnera pas car le mot "nom" sera toujours affiché.

Après la boucle, je vais prendre la dernière chaîne, puis l’analyser puis l’évaluer.
eval (parse (fitmodelstring));
Notez que la chaîne en boucle n’est pas montrée ci-dessus.
Je vous remercie,
Nate
Re: Chaîne d'analyse avec le symbole "*" dedans sans créer d'espaces supplémentairesUtilisez le wrapper name () autour du nom problématique.
a="D";
b="L";
c="* 15";
f = "name(\!""||a||b||c||"\!")";
ex = parse(f);
show(ex);
ex = Nom ("DL * 15");
l'emballage n'est pas vraiment là; c'est un indice pour l'analyseur que ce nom ne suit pas les règles habituelles. Il est également affiché avec le wrapper pour la même raison. Notez également le \! "Pour ajouter les guillemets.