Zeichenfolge mit dem Symbol "*" ohne zusätzliche LeerzeichenHallo,
Ich durchlaufe programmatisch ein paar Arrays, um eine String-Variable zu erstellen, die analysiert und ausgewertet werden kann, um ein Modell automatisch an die Daten anzupassen.
Das Problem, auf das ich stoße, ist, dass die Spaltenüberschriften "DL * 15" heißen.
Wenn ich versuche, ": DL * 15" zu analysieren und auszuwerten, wird eine Fehlermeldung angezeigt, weil die Analyse erstellt: DL * 15. Der zusätzliche Speicherplatz macht die Auswertung ungültig, da die Spalte DL * 15 und nicht DL * 15 heißt.
Ein Beispiel für das, was passiert, ist unten dargestellt:

Gibt es eine Möglichkeit, den Abstand beim Parsen von "DL * 15" zu verhindern?
Vielen Dank,
Nate
Betreff: Parse String mit "*" Symbol ohne zusätzliche Leerzeichen zu erstellenDer Name-Wrapper umfasst den gesamten Namen, nicht nur das Zeichen, das den Namen wie einen Ausdruck aussehen lässt.
Oder...
Es gibt andere Möglichkeiten, Ausdrücke wie diese zu erstellen, indem Sie die Ausdrucksbearbeitungsfunktionen verwenden, um Ausdrücke direkt zu bearbeiten, anstatt mit Strings zu arbeiten und die Strings in Ausdrücke zu analysieren. Wenn Ihre Tabelle eine Spalte mit dem Namen " sin (a) * cos (b) "Sie könnten das tun
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 = Fit-Modell (Y ( Name ("sin (a) * cos (b)") ), Effekte (: Alter,: Geschlecht,: Höhe), Persönlichkeit ("Standard Least Squares"), Hervorhebung ("Effect Leverage"), Lauf (: Gewicht << {Plot Actual von Predicted (1)), Plot-Regression (0 ), Restaufzeichnung nach vorhergesagter (1), Plot-Effekt-Hebel (1)}));
SubstituteInto durchsucht das erste Argument nach dem zweiten Argument und ersetzt es durch das dritte Argument. AsName konvertiert eine Zeichenfolge in einen Namen. Die Funktion expr () wird verwendet, um einen Ausdruck zu übergeben, ohne ihn zuerst auszuwerten.
Sie werden den Name () - Wrapper häufig sehen, wenn Sie Spalten so benennen
Betreff: Parse String mit "*" Symbol ohne zusätzliche Leerzeichen zu erstellenEinige Anmerkungen zu meiner Antwort:
Das "\ [... ] \ " Mit construct können Sie alles in doppelte Anführungszeichen setzen, noch mehr Anführungszeichen.
evalinsert Ersetzt Werte für Variablen, die vom Zeichen ^ umgeben sind.
Betreff: Parse String mit "*" Symbol ohne zusätzliche Leerzeichen zu erstellenSie können nicht mischen: D und: Name.
Versuchen Sie etwas so:
fitmodelstring = fitmodelstring || evalinsert("\[Y(:name("D^a[i]^ * ^b[j]^"), Efffects(]\");
Betreff: Parse String mit "*" Symbol ohne zusätzliche Leerzeichen zu erstellenIch sagte, es sei etwas zu früh gelöst.
Ich habe den Code ausprobiert, aber er funktioniert nicht in dem komplexeren Kontext meiner Situation, in der ich zwei Arrays durchläuft.
Wenn Sie nicht den gesamten Code ausschreiben, funktioniert dies nicht, da das Wort "Name" immer noch angezeigt wird.

Nach der Schleife nehme ich die letzte Zeichenfolge und analysiere sie zuerst und bewerte sie dann.
eval (parse (fitmodelstring));
Beachten Sie, dass die gesamte Schleife nicht oben angezeigt wird.
Vielen Dank,
Nate
Betreff: Parse String mit "*" Symbol ohne zusätzliche Leerzeichen zu erstellenVerwenden Sie den Name () - Wrapper für den problematischen Namen.
a="D";
b="L";
c="* 15";
f = "name(\!""||a||b||c||"\!")";
ex = parse(f);
show(ex);
ex = Name ("DL * 15");
der Wrapper ist nicht wirklich da; Es ist ein Hinweis an den Parser, dass dieser Name nicht den üblichen Regeln folgt. Aus demselben Grund wird es auch mit dem Wrapper angezeigt. Beachten Sie auch das \! ", Um die Anführungszeichen anzufügen.