Ho bisogno di un ciclo JSL che esegua una ricerca nelle intestazioni di colonna di una tabella dati e, se l'intestazione di colonna contiene "(rad)", vorrei moltiplicare tutti i valori in quella colonna per 180/pi greco e quindi modificare "(rad)" in "(deg)" nell'intestazione di colonna.
Ho provato tutto quello che mi è venuto in mente, incluso chatGPT, ma finora senza successo.
- Ottieni tutte le colonne usando << Ottieni nomi colonne
- Imposta la tabella in modo che non venga aggiornata utilizzando << inizio aggiornamento dati
- Passa attraverso di loro usando For Each
- Controlla se il loro nome contiene (rad) utilizzando Contiene / Inizia con / Termina con
- Utilizzare For Each Row per ciclare su di esso e modificare i valori in gradi
- Spero che ci sia un metodo migliore per questo, ma non sono sicuro che ci sia davvero, a meno che non si desideri creare nuove colonne ed eliminare quelle vecchie, poiché non dovremmo usare << imposta ogni valore, il che lo rende estremamente facile da fare e da leggere.
- Applicare la formula in posizione (aggiunto in JMP18) potrebbe funzionare ma è difficile capire come utilizzarlo
- Utilizzare i valori della matrice è una buona opzione, ma For Each Row funzionerà sempre, è sempre una buona idea impararlo
- Utilizzare Sostituisci e << Imposta Nome per rinominare la colonna
- lascia che la tabella si aggiorni di nuovo usando << fine aggiornamento dati
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(2),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([., .])),
New Column("a (rad)", Numeric, "Continuous", Format("Best", 12), Set Values([1, .]))
);
colnames = dt << Get Column Names(Continuos, "String");
dt << Begin Data Update();
For Each({colname}, colnames,
If(Contains(colname, "(rad)"),
For Each Row(dt, Column(dt, colname)[] = Column(dt, colname)[] * 180 / Pi());
Column(dt, colname) << Set Name(Substitute(colname, "(rad)", "(deg)"));
)
);
dt << End Data Update();
Write();
Sempre impressionante, grazie!
Alcune domande di approfondimento:
- Perché "colname" è tra parentesi graffe come primo argomento del ciclo for each?
- Stavo provando a fare qualcosa del tipo "dt:colname[rowIdx] = dt:colname[rowIdx] * 180/Pi()". Come interpreterebbe questa riga JMP e perché è sbagliata?
- Cosa fa "[]" alla fine di "Column(dt,colname)[]"? Esiste una sezione della documentazione che discute questo costrutto?
Grazie ancora!