Quindi questa dimostrazione esaminerà alcune delle caratteristiche di base di elenchi e matrici. Quindi inizierò con le liste. E avrò una nuova finestra dell'editor di script. Quindi, ancora una volta, la scorciatoia da tastiera è Ctrl+T. E lo ridimensionerò e lo riorganizzerò. Fammi andare avanti e portare il registro davanti al diario. E creerò una variabile che chiamerò la mia lista. E gli assegnerò i risultati della funzione elenco. Quindi l'elenco di parole apre le parentesi e userò le variabili a, b. E poi calcolerò la radice quadrata di Quindi è sqrt e poi tra parentesi. E andrò avanti e riformatterò solo per ottenere le maiuscole e la spaziatura lì. Ed eseguirò lo script. E quindi ciò che appare nel registro è semplicemente l'informazione che è stata assegnata a una lista con tre elementi. Se passo il mouse sopra la mia lista, quello che vediamo è che sta memorizzando gli elementi che ho inserito non valutati. Quindi sono le due variabili e la funzione radice quadrata In una nuova riga nella finestra dell'editor di script, richiederò la valutazione degli elementi nella mia lista. Quindi digiterò eval list apri parentesi il mio elenco. E seguirò solo quella linea. E così vedo i risultati valutati. Ora, la mia lista rimane non valutata. Quindi, se volessi lavorare con i risultati dell'elenco di valutazione, una cosa sarebbe assegnare il risultato della valutazione dell'elenco a un nuovo elenco. Ci sono altri modi in cui possiamo usare gli indici, tuttavia, per lavorare con gli elementi valutati dall'elenco. Quindi, prima di parlarne, lasciami parlare dell'indicizzazione dell'elenco solo in generale. Quindi andrò a una nuova linea. E scriverò la mia lista aperta tra parentesi quadre. E digiterò a per estrarre il secondo elemento nell'elenco. E se eseguo solo quella riga, quello che vedo è l'elemento non valutato. E se volessi il risultato valutato? Bene, posso davvero tornare alla mia seconda riga qui. Posso richiedere la valutazione della mia lista e poi sottoscrivere quel risultato. Quindi metto la parentesi quadra aperta, a lì dentro, chiudo la parentesi quadra. E eseguirò di nuovo solo quella riga, usando il tasto Invio sul tastierino numerico all'estrema destra della tastiera del mio computer desktop. Quindi lì, ho appena sottoscritto l'elenco valutato per ottenere quel risultato. Abbiamo parlato di modificare gli elenchi. Quindi voglio passare a una nuova linea. E userò insert in. Quindi inserisci in modificherà l'elenco in atto. Allora apro le parentesi. E quale elenco sto modificando? Bene, è memorizzato nella mia lista. Questo è il primo argomento. Cosa voglio aggiungere? Aggiungo il nome Giovanni. Quindi è una stringa di caratteri. E se non metto lì quella virgola e non fornisco il terzo argomento, lo mette semplicemente alla fine dell'elenco. Ma avrò la virgola e digiterò a come terzo argomento opzionale per metterlo nella seconda posizione. E poi, eseguirò solo quella linea. E insert in in realtà non restituisce nulla al registro. Ma se passo il mouse sopra la mia lista in qualsiasi punto dello script, puoi vedere che è stata modificata per avere il nome John nella seconda posizione. Ora, supponiamo di avere un elenco, forse mi è stato restituito da una funzione JSL o è stato utilizzato per raccogliere l'input dell'utente, ad esempio. E ho bisogno di trovare un elemento nell'elenco in modo da poterlo rimuovere. So che è... beh, non so che sia nell'elenco. Voglio prima interrogare se è nell'elenco. E poi se lo è, voglio essere in grado di rimuoverlo. Quindi creerò una variabile per memorizzare la posizione dell'elemento John. Lo chiamerò pos. E gli assegnerò il risultato della funzione contiene. E così abbiamo visto contiene con stringhe di caratteri. Ora contiene con un elenco. Stiamo cercando nella mia lista la stringa di caratteri John, e ovviamente farà distinzione tra maiuscole e minuscole. E se eseguo quella riga, il risultato che viene restituito e memorizzato nella variabile pos è E quindi se poi volessi rimuoverlo dall'elenco, ad esempio, potrei andare avanti e digitare rimuovi dalle parentesi aperte. Stiamo cercando nella mia lista. E voglio invece di rimuovere semplicemente l'ultimo elemento, che è quello che otterrei se non avessi fornito nulla dopo il primo argomento, userò la variabile pos. E corro quella linea. E questo restituisce un elenco con il numero di elementi rimossi. Di default ne prendiamo uno partendo dalla posizione specificata nel secondo argomento. Quindi ottengo una lista che ha quella stringa di caratteri. E potrei effettivamente assegnare quel risultato alla sua stessa variabile se volessi usare quell'elemento dell'elenco altrove nel mio script. E potrei anche estrarlo dall'elenco in cui è stato restituito inserendo un pedice con un Quindi fammi - in questo momento, il mio elenco non contiene più John. Ho intenzione di eseguire di nuovo la mia linea. Il valore memorizzato in pos sarà sempre lo stesso. E ho intenzione di eseguire la riga E così che ha restituito la stringa di caratteri non nell'elenco. E se passo il mouse sopra la mia lista, possiamo vedere che è stato riportato al valore precedente. Parliamo un po' di matrici. Farò clic con il pulsante destro del mouse nel registro per cancellarlo, quindi selezionare tutto nella finestra dell'editor di script ed eliminarlo. Quindi inizierò simulando le persone, che saranno le mie righe nella mia matrice. E ognuna di queste persone lancerà un dado cinque volte, un dado a sei facce. E quelle saranno le mie colonne. E li genererò semplicemente con un generatore di numeri casuali, ma inizierò con un valore seme specifico in modo che se segui, otterrai esattamente gli stessi numeri casuali. E useremo una funzione chiamata funzione j, che crea una matrice con un numero specificato di righe e colonne. Questi sono i suoi primi due argomenti e poi quale sarà il valore nella matrice, questo è il terzo argomento. Quindi userò la funzione di ripristino casuale con un valore di E, ancora, questo sta solo specificando il mio seme iniziale per il generatore di numeri casuali. Quindi andrò avanti e lo eseguirò. E poi su una nuova riga creerò una variabile m, a cui verrà assegnato il risultato della funzione j. Di nuovo, inizio con il numero di righe in cui simuliamo le persone e poi il numero di colonne, lanciando cinque volte un dado a sei facce. E userò la funzione numero intero casuale con gli argomenti-- inizieremo e selezioneremo numeri casuali fino a E, ancora, posso riformattare questo solo per farlo sembrare un po'-- oops, l'ho eseguito invece di riformattare esso. Posso ancora riformattarlo. Eccoci. Quindi è anche eseguito ora. E se rendiamo il registro un po' più grande, puoi vedere che ho quella matrice riga per colonna. E come faccio a fare riferimento agli elementi in quella matrice? Bene, usiamo gli indici. Quindi vado su una nuova linea. Forse sono interessato a cosa ha tirato la quinta persona al terzo lancio del dado. Quindi inserirò in pedice il nome della variabile m, quindi m e poi parentesi quadre. per il numero di riga, virgola, per il numero di colonna, chiudi la parentesi quadra ed esegui quella riga. E così la quinta persona per il suo terzo tiro ha tirato un E possiamo effettivamente verificarlo. Quindi c'è uno, due, tre, quattro, c'è la quinta fila e c'è il terzo lancio del dado. Ora, cosa succede se voglio trovare un'intera riga o un'intera colonna? Bene, su una nuova riga qui-- in realtà, userò la stessa riga e sostituirò semplicemente il pedice nella mia riga Diciamo che voglio tutta la riga Quindi scrivo per il primo pedice. E poi dopo la virgola, digiterò a indicando che non voglio che selezioni una colonna in particolare. Questa sarà una riga in ogni colonna. E posso eseguirlo. E questo mi dà tutti i valori. E potremmo, se vuoi scorrere verso l'alto, verificare che quelli siano effettivamente i valori nella riga Quindi è, in effetti, ciò che restituiamo. Potrei fare la stessa cosa per selezionare una colonna in cui avrei solo un pedice di riga e quindi qualsiasi numero di colonna. Ma supponiamo che io voglia sbarazzarmi di un'intera riga. Diciamo che decido che la terza persona in qualche modo ha imbrogliato al lancio del dado. Quindi metterò in pedice m con a e a E poi prima del punto e virgola, assegnerò a quella riga il valore di una matrice vuota. Quindi apro e chiudo le parentesi quadre. E se eseguo quella riga, ciò che viene restituito al registro è una matrice vuota. E se passo il mouse sopra me vuoi contare le righe, puoi vedere che ora ci sono solo nove righe. Ora, di nuovo, semplicemente giocando con alcune delle cose che possiamo fare con le matrici, supponiamo che le nove persone rimanenti ruotino ciascuna per la sesta volta. Quindi lo farò sul posto. Gli operatori, avrò m. E poi l'operatore di assegnazione sarà il Concat Quindi sono le doppie barre verticali e un segno di uguale. Nessuno spazio, perché non possiamo avere spazi tra i componenti di questi operatori che hanno più caratteri. E userò di nuovo la funzione j. E abbiamo solo nove righe. E voglio una colonna. E userò di nuovo un numero intero casuale. E per i suoi argomenti è ancora un dado a sei facce, quindi fornirò Quindi questo modificherà m sul posto aggiungendo una sesta colonna quando eseguo quella riga. E quindi ora puoi vedere che abbiamo sei colonne nella matrice. Cancelliamo il registro. E ricomincerò con l'assegnazione di valori a m. Non userò più numeri casuali. Quindi cancellerò il contenuto della finestra dell'editor di script. Inizializzerò una variabile contatore i e assegnerò il valore di Quindi lo eseguirò solo per inizializzarlo. E poi su una nuova riga, assegnerò una matrice diversa a m. Quindi a m verrà assegnato il risultato della funzione j. Avrà cinque righe. Questa matrice avrà cinque righe, cinque colonne e a partire da incrementerà i di per ogni elemento della matrice. Quindi userò i plus plus, quell'operatore di incremento post che aggiunge sul posto. E andrò avanti e lo eseguirò. E quindi ho una matrice per. E nota che stiamo incrementando per riga, non per colonna. E questo è importante per un altro metodo di subscripting che vedremo emergere. Quindi incrementiamo per riga. Ora, cosa succede se voglio una sequenza che vada davvero fino a Beh, ci sono sicuramente molti modi diversi per farlo. Ma un modo rapido sarebbe semplicemente moltiplicare ogni elemento nella matrice che ho appena creato da E ancora, possiamo vettorizzare queste operazioni. Non devo scorrere la matrice. Assegno semplicemente -- E farò un altro compito sul posto-- m e poi l'asterisco è uguale, quindi il moltiplicatore per Non dobbiamo farlo sul posto. Ma invece di creare una nuova variabile, lo farò. Quindi, di nuovo, non devo eseguire il loop. Andrà in base agli elementi moltiplicando tutto per E lo eseguo. E quindi c'è quella matrice che va da a con incrementi di Now, un altro modo per creare questa matrice sarebbe in due passaggi, a partire dalla funzione di indice. Quindi cancellerò cosa c'è nella finestra dell'editor di script. Andrò avanti e cancellerò anche il registro. E nella finestra dell'editor di script, digiterò m. E a questo verrà assegnato il valore che risulta dalla funzione di indice: parentesi aperte indice. E inizieremo da Contiamo fino a Il terzo argomento facoltativo, che userò qui è l'incremento. Quindi andremo avanti Quindi ecco il primo passo per creare quella matrice che avevamo la matrice by. Quindi creiamo un vettore riga usando la funzione di indice. E poi, posso dare forma a questo. Quindi vado su una nuova linea. Ho intenzione di sovrascrivere di nuovo m. Quindi m sarà il risultato della funzione shape, che prenderà m come primo argomento e cambierà le sue dimensioni per avere cinque righe e cinque colonne. Devi stare molto attento con questa funzione di forma. Se il tuo vettore di riga in questo caso non corrisponde a una matrice per quadrato che ho specificato qui, JMP troncherà questo vettore se la matrice specificata con la forma è troppo piccola. Oppure, se specifichi una matrice più grande, inizierà semplicemente a ripetere il vettore. Quindi fai attenzione quando usi la funzione forma. Quindi voglio eseguirlo. E c'è di nuovo quella matrice quadrata, che va da a incrementi di Now, parte del motivo per cui volevo farlo, a parte il fatto che di solito ci sono molti modi per fare tutto in JMP, è parlare di un altro modo di sottoscrivere. Abbiamo visto gli indici riga per colonna. E voglio parlare del singolo pedice che vedrai a volte. Quindi, se volevo-- possiamo usare la funzione contiene con-- l'abbiamo visto con stringhe di caratteri. Puoi usarlo con le liste. Possiamo usarlo con le matrici. Se voglio trovare la posizione del numero nella matrice che è attualmente memorizzata m, beh, se lo stessi descrivendo direi, OK, è la colonna di riga Quindi userei un pedice virgola. Ma se chiedessi a JMP di trovarlo per me, userò solo i contiene. E ancora, in pratica, il tuo script potrebbe assegnare questo risultato a una variabile. Non ho bisogno di farlo qui: contiene e quindi m virgola JMP non mi darà Mi darà un singolo valore. Bene, come funziona quel valore unico? Il pedice a valore singolo, quindi se torno indietro, andrò su una nuova riga qui e digiterò m e poi le parentesi quadre con un pedice a valore singolo ed eseguirò quello. Questo è il pedice a valore singolo tratterà la mia matrice come se fosse un vettore di riga e inizierà a contare dalla prima posizione. Quindi, quando torniamo indietro nel registro per vedere il risultato della mia funzione di indice, in modo che il singolo pedice lo tratti come un vettore di riga e conti per riga, proprio come abbiamo incrementato per riga, per ottenere la posizione di quel valore. E vedremo altri esempi quando in seguito lavoreremo con le matrici di JMP che ci restituisce quel singolo pedice. L'ultima cosa che faremo qui è solo una sorta di calcolo arbitrario per illustrare che ci sono funzioni che possono prendere matrici come argomenti, funzioni computazionali -- quindi abbiamo già visto la funzione shape e contiene. Ma vado avanti su una nuova riga qui e digito log e poi m come argomento diviso per E l'altra cosa su questo esempio-- beh, fammi eseguire. E poi ti dirò l'altra cosa sull'esempio. Quindi ho appena fatto quel calcolo su ogni elemento e diviso per Ma l'altra cosa che voglio solo menzionare è che in JSL, le funzioni possono prendere funzioni come argomenti. Lo vedremo dappertutto. Abbiamo già visto alcuni esempi. Quindi questo operatore divide, questa è davvero la funzione divide che prende il log di m come argomento e quindi non avevo bisogno di calcolare il log di m e memorizzarlo in una variabile per fornirlo alla funzione divide. Sono in grado di fare quel calcolo direttamente. E ancora, come sarebbe se scrivessi la funzione sarebbe dividere parentesi aperte. Sostituisci l'operatore con una virgola e chiudi le parentesi. Quindi non devo fornire una variabile che memorizza questi valori. Posso calcolarli mentre eseguo la funzione divide. Quindi questi sono diversi esempi di elenchi e matrici e alcuni dei modi in cui possiamo lavorare con quei particolari tipi di strutture dati.