Parse String con il simbolo "*" senza Creazione di spazi aggiuntiviCiao,
Sto programmando iterando attraverso un paio di matrici per creare una variabile stringa che può essere analizzata e valutata per Adattare un modello ai dati automaticamente.
Il problema che sto incontrando è che le intestazioni delle colonne sono denominate "DL * 15".
Pertanto, quando cerco di analizzare e valutare ": DL * 15" viene visualizzato un errore perché l'analisi crea: DL * 15. Lo spazio aggiuntivo invalida la valutazione, poiché la colonna è denominata: DL * 15 not: DL * 15.
Un esempio di ciò che sta accadendo è mostrato di seguito:

C'è un modo per evitare che si verifichi la spaziatura durante l'analisi di "DL * 15"?
Grazie,
Nate
Ri: Parse String con il simbolo "*" al suo interno senza creare spazi aggiuntiviil nome wrapper fa il nome intero, non solo il carattere che fa apparire il nome come un'espressione.
O...
Esistono altri modi per creare espressioni come questa, usando le funzioni di gestione delle espressioni per manipolare le espressioni direttamente piuttosto che lavorare con le stringhe e analizzare le stringhe in espressioni. Se il tuo tavolo aveva una colonna con il nome " sin (a) * cos (b) "potresti farlo
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 Model (Y ( Nome ( "sin (a) * cos (b)") ), Effetti (: età, sesso, altezza), Personalità ("Minimi quadrati standard"), Enfasi ("Effetto leva"), Esegui (: peso << {Plot Actual by Predicted (1), Plot Regression (0 ), Plot Residual by Predicted (1), Plot Effect Leverage (1)}));
SubstituteInto cerca il primo argomento per il secondo argomento e lo sostituisce con il terzo argomento. AsName converte una stringa in un nome. La funzione expr () viene utilizzata per passare un'espressione senza prima valutarla.
Vedrai il wrapper Name (), molto, se tu dai il nome a colonne come questa
Ri: Parse String con il simbolo "*" al suo interno senza creare spazi aggiuntiviAlcune note sulla mia risposta:
Il "\ [... ] \" costrutto ti permette di inserire qualsiasi cosa tra virgolette doppie, anche più virgolette doppie.
evalinsert sostituisce i valori per le variabili circondate dal carattere ^.
Ri: Parse String con il simbolo "*" al suo interno senza creare spazi aggiuntiviNon è possibile mescolare: D e: nome.
Prova qualcosa del genere:
fitmodelstring = fitmodelstring || evalinsert("\[Y(:name("D^a[i]^ * ^b[j]^"), Efffects(]\");
Ri: Parse String con il simbolo "*" al suo interno senza creare spazi aggiuntiviHo detto che è stato risolto un po 'troppo presto.
Ho provato il codice ma non funziona nel contesto più complesso della mia situazione in cui sto iterando attraverso due array.
Senza scrivere tutto il codice, questo non funzionerà poiché la parola "nome" verrà ancora visualizzata.

Dopo il ciclo, prenderò la stringa finale e la analizzerò prima e poi la valuterò.
eval (parse (fitmodelstring));
Nota, l'intera stringa ad anello non è mostrata sopra.
Grazie,
Nate
Ri: Parse String con il simbolo "*" al suo interno senza creare spazi aggiuntiviUsa il wrapper name () attorno al nome problematico.
a="D";
b="L";
c="* 15";
f = "name(\!""||a||b||c||"\!")";
ex = parse(f);
show(ex);
ex = Nome ("DL * 15");
l'involucro non è davvero lì; è un suggerimento al parser che questo nome non segue le solite regole. Viene anche visualizzato con il wrapper per lo stesso motivo. Notare anche \! "Per aggiungere le virgolette.