Come inserisco un riferimento a un nome di variabile di tabella generato dinamicamente all'interno di una formula di colonna in modo tale da poter successivamente modificare la variabile di tabella e aggiornare ancora i valori della colonna. E poi fallo per un numero sconosciuto di colonne.
dt = Current Data Table();
NewCol = function({ColNr},
//Set a name table variable with the name of the column and RMSE appended to it
dt << Set Table Variable( concat(Column(ColNr)<< Get Name(),"RMSE"), 0 );
//Create a new column with the same name as the original column but with " with RMSE" at the end.
//Place a formula in this column which takes the original column value and add random RMSE as specified by the table variable to it.
Eval(
substitute(
expr(
dt<<NEW column=""></NEW>
Grazie per avermi sfidato, ho fatto un altro tentativo e l'ho risolto 
Hai ragione, la creazione del nome della colonna funziona correttamente. Non funziona per creare la parte formula della nuova espressione di colonna.
Quello che dovevo fare è mettere :Name( "...") attorno ai nomi delle variabili di colonna e tabella nella funzione parse.
dt = New Table( "Untitled 9",
Add Rows( 0 ),
New Column( "Pred Formula Thickness (A)",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[-1.09815926721176, -0.143977108758327, -1.60078929360768,
-0.340409665497429, -0.581215173360104, 0.233876291958488,
-0.357108531367114, 0.0704280592629584, 1.86236889119533,
0.669812241478143, -0.00962200322380528, 1.33041117732878,
0.533367791752501, 2.24183743599671, -0.506060621538248]
),
Set Display Width( 145 )
)
);
ColNr = 1;
//Create the table variable based on the column name with RMSE added to it.
dt << Set Table Variable( concat(column(ColNr)<< Get Name()," RMSE"), 0 );
//Create the text for the column formula. Notice that the formula stored in test is correct. It is the 'column name' + 'the table variable' multiplied with random normal.
test = ":Name( \!"" || char(column(ColNr)<< Get Name()) || "\!") + :Name( \!"" || char(column(ColNr)<< Get Name()) || " RMSE\!") * Random Normal()";
//But when putting this in a column formula equation, the parser stops parsing after the second repeat of the column name. In an ideal world I would just refer to the table variable directly.
eval(parse( "dt<<NEW column=""></NEW>
Il metodo Eval(Parse()) può gestire facilmente nomi di colonna complessi. Devi solo riconoscere che tali problemi potrebbero esistere. Qui c'è un semplice esempio
Names Default to here(1);
dt = New Table( "big class",
Add Rows( 40 ),
New Column(
"Complex column a+7/(1_2)",
Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Values(
[59, 61, 55, 66, 52, 60, 61, 51, 60, 61, 56, 65, 63, 58, 59, 61, 62, 65, 63,
62, 63, 64, 65, 64, 68, 64, 69, 62, 64, 67, 65, 66, 62, 66, 65, 60, 68, 62,
68, 70]
)
),
New Column(
"weight",
Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Values(
[95, 123, 74, 145, 64, 84, 128, 79, 112, 107, 67, 98, 105, 95, 79, 81, 91,
142, 84, 85, 93, 99, 119, 92, 112, 99, 113, 92, 112, 128, 111, 105, 104,
106, 112, 115, 128, 116, 134, 172]
)
)
);
col names = dt<<GET column="" names=""></GET>
Sto ancora cercando una soluzione più robusta poiché il metodo parse(eval()) non si occupa bene di () nel nome della variabile della tabella o del nome della colonna.
Oh, capisco. Dal momento che stai generando i nomi delle colonne al volo, ci sono un paio di strategie che potresti usare.
Il primo consiste nell'usare solo un paio di comandi "sostituisci in ()" su un elenco di nomi di colonne che generi in fase di esecuzione. Questo generalmente funzionerà bene nella maggior parte dei casi.
In secondo luogo, è possibile utilizzare il metodo Eval(Parse()), in cui si crea una stringa del proprio JSL a livello di codice utilizzando i comandi concatenati. Questo è il mio proiettile d'argento. In particolare con cose relative alle proprietà e alla manipolazione delle colonne. Elimina la necessità di tutti i comandi extra Eval() perché lo script sostanzialmente "digita" il comando finito come una stringa e lo converte in un'espressione. Quindi esegui semplicemente l'espressione.Ri: JSL: come creare un riferimento a una variabile di tabella all'interno di una formula di colonnaIl problema è che non riesco a codificare i nomi delle variabili della tabella nella formula della colonna poiché il numero di colonne e i nomi di quelle colonne sono sconosciuti. La creazione delle variabili della tabella è fattibile. Fare riferimento a loro nella formula della colonna è la parte difficile.Ri: JSL: come creare un riferimento a una variabile di tabella all'interno di una formula di colonnaInizieresti generando le variabili della tua tabella:
dt << New Table Variable("RMSE_1", 30);
Probabilmente lo faresti come parte del tuo ciclo prima di generare la nuova colonna formula.
Successivamente, si fa riferimento a una variabile di tabella in modo simile alle colonne, quindi dall'alto:
// Add the table variable
dt << New Table Variable( "RMSE_1", 30 );
// Add the column referencing the table variable
dt << New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( :RMSE_1 ^ 2 )
);
migliore,
M