errore: "L'espressione non si adatta ai tipi di colonna disponibili"<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
Nel codice seguente ricevo l'errore: "L'espressione non si adatta ai tipi di colonna disponibili" e si verifica durante la valutazione della formula..
Sto solo cercando di fare riferimento alla stessa tabella a cui sto aggiungendo una nuova colonna, ad esempio sottraendo due colonne all'interno della tabella chiamata "dt" a cui sto aggiungendo una nuova colonna... Non riesco a capire perché non funziona.
dt = miaTabella();
cols = dt << GetColumnNames("String");
//Aspetta(3);
For(c=1, c<=NItems(cols), c++,
Se(IniziaCon(cols, "HTOL"),
dt << Nuova colonna(col|| " Δ", Numerico, Continuo, Formula( lista di valutazione(colonna(dt,4)) ) );
);
);
Grazie
Jeff
Ri: errore: "L'espressione non si adatta ai tipi di colonna disponibili"Grazie PMroz! Ho finito per risolvere questo problema ieri sera usando un linguaggio abbastanza simile al tuo - ho usato qualcosa del genere:
Penso di aver usato parse .. Non ricordo se dovevo usare eval o meno, sono sicuro di averlo fatto al 60% circa.
Se qualcuno ha bisogno che lo faccia, rispondi a questo e cercherò la sintassi esatta.
dt <|| " Δ"), Numerico, Continuo, Formula(:^cols^ - :dati 0))
Ri: errore: "L'espressione non si adatta ai tipi di colonna disponibili"Tecnica simile a @Stephen.pearson:
dt = Nuova tabella ( "Dimostrazione" , Aggiungi righe ( 3 ) ,
Nuova colonna ( "dati 0" , Numerico , Continuo , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 1 , 2 , 3 ] ) ) ,
Nuova colonna ( "dati 100" , Numerico , Continuo , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 4 , 5 , 6 ] ) ) ,
Nuova colonna ( "dati 200" , Numerico , Continuo , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 7 , 8 , 9 ] ) )
) ;
col = dt << ottenere i nomi delle colonne ( "Corda" ) ;
per ( C = 1 , C <= nitems ( col ) , C ++,
Se ( inizia con ( maiuscolo ( col [ C ]) , "DATI" ) ,
nuova_col_espr = evalinsert ( "\[dt << nuova colonna( cols|| " Δ", Numerico, Continuo, Formula(:^cols^ - :dati 0))]\") ;
eval ( analizzare ( nuova_col_espr )) ;
) ;
) ;
Ri: errore: "L'espressione non si adatta ai tipi di colonna disponibili"colonna(dt,c) non è lo stesso di :dati 100 per quanto riguarda la formula.
Un modo per far funzionare questo codice è utilizzare JSL dinamico, che valuta il JSL prima di eseguirlo.
// Non sono sicuro che questa sia la sintassi giusta, ma hai un'idea
Colonna di destinazione = colonna(dt,c) <
//sostituzione dinamica per entrare nella clausola if
Valutazione(
Analizza(
Inserisci valutazione(
"\[
dt << Nuova colonna(col|| " delta", Numerico, Continuo, Formula(:^Colonna destinazione^ - :dati 0 ) );
]\"
)) );
Se i nomi delle colonne contengono caratteri speciali potrebbe essere necessario utilizzare :Name(" ^Colonna destinazione^ ") nella formula. Ciò può comunque fornire risultati strani se sono presenti simboli ^/-+* nel nome della colonna poiché la formula non viene valutata in modo affidabile.
Ri: errore: "L'espressione non si adatta ai tipi di colonna disponibili"Grazie per la risposta rapida!!
Ho una tabella "dt" che ha colonne di dati.Possono essere "dati 0" o "dati 100" o "dati 200", fino ad un numero sconosciuto.
Qualunque sia il nome della colonna, voglio sottrarre da essa la colonna "dati 0", anche se la colonna è "dati 0" (quindi quella colonna è tutta zero, ma le altre come "dati 100" non sono tutti zeri" .
Quindi stavo cercando di avere un ciclo for che controllasse ogni colonna e, se ad esempio si chiama "data 100", volevo che creasse automaticamente una colonna "data 100 delta", con la formula al suo interno: (data 100 - dati 0).
Pensavo di poterlo fare nel modo seguente:
dt = miaTabella();
cols = dt << GetColumnNames("String");
//Aspetta(3);
For(c=1, c<=NItems(cols), c++,
Se(IniziaCon(cols, "dati"),
dt << Nuova colonna(col|| " delta", Numerico, Continuo, Formula( colonna(dt,c) - :dati 0 ) );
);
);
il riferimento ":data 0" sembra funzionare: inserirà i dati ":data 0" copiati nella colonna "data 100 delta", ma se inserisco "column(dt,c)", provo a ottenere il colonna dati 100, si verifica un errore.....
Grazie!!
Ri: errore: "L'espressione non si adatta ai tipi di colonna disponibili"Jeff,
Hai ragione, il problema è "eval list(colonna(dt,4))". Eval List() si aspetta che ci sia una lista da valutare. ad esempio: {1,2,3}.
E' questo ciò che volevi? Il contenuto degli elenchi Column(dt, 4) è? Poiché molto probabilmente in quella colonna sono presenti valori numerici, viene generato un errore.
Anche in questo caso, le colonne della tabella dati JMP accettano solo 3 tipi di dati, Numerico, Carattere e Stato riga. Se davvero avessi delle liste in ogni cella di Column(4), sarebbero in realtà stringhe. cioè "{1,2,3}". In tal caso si dovrebbe prima analizzare la stringa per convertirla in un'espressione e THEN EvalList() funzionerebbe.
La domanda è: cosa intendevi fare con quella formula?