
Cette démonstration va examiner certaines des fonctionnalités de base des listes et des matrices. Je vais commencer par les listes. J'ouvre une nouvelle fenêtre d'éditeur de script. Le raccourci clavier est Ctrl+T. Je vais la redimensionner et la réorganiser. Je place le journal devant le journal. Je vais créer une variable que j'appellerai ma liste. J'y assignerai les résultats de la fonction de liste. Le mot liste est entre parenthèses, et j'utiliserai les variables a et b. Je calculerai ensuite la racine carrée de . Donc, c'est sqrt, entre parenthèses. Je reformaterai ensuite pour intégrer les majuscules et les espacements. J'exécuterai ensuite le script. Le journal indique simplement qu'une liste de trois éléments a été assignée. Si je survole ma liste, on voit qu'elle stocke les éléments saisis sans les évaluer. Il s'agit donc des deux variables et de la fonction racine carrée. Sur une nouvelle ligne de mon éditeur de script, je vais demander l'évaluation des éléments de ma liste. Je tape eval list open parentheses my list. J'exécute uniquement cette ligne. Je vois donc les résultats évalués. Ma liste reste non évaluée. Si je voulais travailler avec les résultats de eval list, une solution serait d'affecter le résultat de l'évaluation de la liste à une nouvelle liste. Il existe d'autres façons d'utiliser les indices pour travailler avec les éléments évalués de la liste. Avant d'aborder ce sujet, permettez-moi de parler de l'indice de la liste en général. Je vais donc sur une nouvelle ligne. Je tape my list open square brackets. Je tape a pour extraire le deuxième élément de la liste. Si j'exécute uniquement cette ligne, je vois l'élément non évalué. Et si je voulais le résultat évalué ? Je peux revenir à ma deuxième ligne ici. Je peux demander l'évaluation de ma liste, puis inscrivez le résultat. Je mets un crochet ouvrant, un « a » à l'intérieur, puis je ferme le crochet. Je réexécute cette ligne en appuyant sur la touche Entrée du pavé numérique, à l'extrême droite de mon clavier. J'ai donc inscris la liste évaluée pour obtenir le résultat. Nous avons parlé de la modification des listes. Je veux donc passer à une nouvelle ligne. Je vais utiliser « insérer dans ». Cette commande modifiera la liste en place. J'ouvre les parenthèses. Quelle liste suis-je en train de modifier ? Elle est stockée dans ma liste. C'est le premier argument. Que veux-je ajouter ? J'ajoute le nom John. C'est donc une chaîne de caractères. Si je ne mets pas de virgule et que je ne fournis pas de troisième argument, elle est simplement placée à la fin de la liste. Mais je vais utiliser la virgule, et je vais saisir « a » comme troisième argument facultatif pour la placer en deuxième position. Ensuite, j'exécute simplement cette ligne. La fonction « insert into » ne renvoie rien au journal. Mais si je survole ma liste n'importe où dans le script, vous pouvez voir qu'elle a été modifiée pour afficher le nom John en deuxième position. Supposons que j'ai une liste, peut-être renvoyée par une fonction JSL ou utilisée pour collecter des données utilisateur, par exemple. Je dois trouver un élément dans la liste pour le supprimer. Je sais qu'il est… enfin, je ne sais pas s'il est dans la liste. Je veux d'abord vérifier s'il est dans la liste. Et si c'est le cas, je veux pouvoir le supprimer. Je vais donc créer une variable pour stocker la position de l'élément John. Je l'appellerai « pos ». Et j'y assignerai le résultat de la fonction « contient ». Nous avons vu « contient » avec des chaînes de caractères. Maintenant, il s'agit de « contient » avec une liste. Nous recherchons la chaîne de caractères John dans ma liste, et la fonction sera sensible à la casse, bien sûr. Et si j'exécute cette ligne, le résultat renvoyé et stocké dans la variable pos est. Si je voulais ensuite supprimer cela de la liste, par exemple, je pourrais continuer et taper remove from open parentheses. Nous regardons dans ma liste. Et au lieu de simplement supprimer le dernier élément, ce que j'obtiendrais si je ne fournissais rien après le premier argument, j'utiliserai la variable pos. Et j'exécute cette ligne. Et cela renvoie une liste avec le nombre d'éléments supprimés. Par défaut, nous en prenons un à partir de la position spécifiée dans le deuxième argument. J'obtiens donc une liste qui contient cette chaîne de caractères. Et je pourrais en fait affecter ce résultat à sa propre variable si je voulais utiliser cet élément de la liste ailleurs dans mon script. Et je pourrais également l'extraire de la liste dans laquelle il est renvoyé en inscrivant ceci avec un. Donc, laissez-moi -- pour le moment, ma liste ne contient plus John. Je vais réexécuter ma ligne. La valeur stockée dans pos sera toujours la même. Je vais exécuter la ligne « And », qui renvoie la chaîne de caractères absente de la liste. Si je survole ma liste, je constate qu'elle a retrouvé sa valeur précédente. Parlons un peu des matrices. Je fais un clic droit dans le journal pour l'effacer, puis je sélectionne tout dans la fenêtre de l'éditeur de scripts et je supprime tout. Je vais donc commencer par simuler des personnes, qui seront les lignes de ma matrice. Chacune de ces personnes lancera un dé cinq fois, un dé à six faces. Ce seront mes colonnes. Je vais les générer avec un générateur de nombres aléatoires, mais je commencerai avec une valeur de départ spécifique pour que, si vous suivez, vous obteniez exactement les mêmes nombres aléatoires. Nous allons utiliser une fonction appelée fonction j, qui crée une matrice avec un nombre spécifié de lignes et de colonnes. Ce sont ses deux premiers arguments, puis la valeur de la matrice, c'est le troisième argument. Je vais donc utiliser la fonction de réinitialisation aléatoire avec une valeur de . Encore une fois, il s'agit simplement de spécifier ma graine de départ pour le générateur de nombres aléatoires. Je vais donc l'exécuter. Ensuite, sur une nouvelle ligne, je vais créer une variable m, à laquelle sera assigné le résultat de la fonction j. Je commence par le nombre de lignes où nous simulons des personnes, puis le nombre de colonnes, en lançant un dé à six faces cinq fois. J'utiliserai la fonction d'entier aléatoire avec les arguments suivants : nous commencerons à et sélectionnerons des nombres aléatoires jusqu'à. Et, encore une fois, je peux reformater ceci juste pour que ça ressemble un peu… oups, je l'ai exécuté au lieu de le reformater. Je peux toujours le reformater. Voilà. Donc, c'est aussi exécuté maintenant. Et si nous agrandissons un peu le journal, vous pouvez voir que j'ai cette matrice ligne par colonne. Et comment faire référence aux éléments de cette matrice ? Eh bien, nous utilisons des indices. Je vais donc passer à une nouvelle ligne. Je suis peut-être intéressé par le résultat obtenu par la cinquième personne lors de son troisième lancer de dé. Je vais donc indicé le nom de la variable m, donc m, puis des crochets. Pour le numéro de ligne, une virgule, pour le numéro de colonne, fermez le crochet et exécutez cette ligne. Et donc la cinquième personne, pour son troisième lancer, a obtenu un. Et nous pouvons effectivement vérifier cela. Donc il y a un, deux, trois, quatre, il y a la cinquième ligne et il y a le troisième lancer de dé. Maintenant, que se passe-t-il si je veux trouver une ligne entière ou une colonne entière ? Eh bien, sur une nouvelle ligne ici - en fait, je vais utiliser la même ligne et simplement remplacer l'indice dans ma ligne. Disons que je veux toute la ligne. Donc, je tape pour le premier indice. Et puis après la virgule, je vais taper un indiquant que je ne veux pas qu'il sélectionne une colonne en particulier. Cela va être ligne chaque colonne. Et je peux exécuter cela. Et cela me donne ligne toutes les valeurs. Et nous pourrions, si vous voulez faire défiler vers le haut, vérifier que ce sont bien les valeurs de la ligne. C'est donc, en fait, ce que nous renvoyons. Je pourrais faire la même chose pour sélectionner une colonne où je mettrais simplement a pour l'indice de ligne, puis n'importe quel numéro de colonne. Mais supposons que je veuille me débarrasser d'une ligne entière. Disons que je décide que la troisième personne a triché au lancer de dé. Je vais donc indicé m avec a et a. Puis, avant le point-virgule, je vais attribuer à cette ligne la valeur d'une matrice vide. Il suffit donc d'ouvrir et de fermer les crochets. Et si j'exécute cette ligne, ce qui est renvoyé au journal est une matrice vide. Et si je survole m et que vous voulez compter les lignes, vous pouvez voir qu'il n'y a plus que neuf lignes. Maintenant, encore une fois, juste pour jouer avec certaines des choses que nous pouvons faire avec les matrices, supposons que les neuf personnes restantes lancent chacune le dé pour la sixième fois. Donc je vais faire cela en place. Les opérateurs, je vais avoir m. L'opérateur d'affectation sera ensuite le Concat. Il s'agit des doubles barres verticales et du signe égal. Pas d'espaces, car les composants de ces opérateurs comportant plusieurs caractères ne peuvent pas être séparés. J'utilise à nouveau la fonction j. Nous n'avons que neuf lignes. Je veux une colonne. J'utilise à nouveau un entier aléatoire. Ses arguments sont toujours un dé à six faces. Je fournis donc ceci : m sera modifié en ajoutant une sixième colonne lors de l'exécution de cette ligne. Vous voyez donc que la matrice a six colonnes. Effaçons le journal. Je recommence à attribuer des valeurs à m. Je n'utilise plus de nombres aléatoires. Je vide le contenu de la fenêtre de l'éditeur de script. Je initialise une variable de compteur i et lui attribue la valeur de… Je l'exécute juste pour l'initialiser. Ensuite, sur une nouvelle ligne, j'attribue une matrice différente à m. Le résultat de la fonction j sera donc attribué à m. Elle aura cinq lignes. Cette matrice aura cinq lignes, cinq colonnes, et à partir de , i sera incrémenté de pour chaque élément de la matrice. J'utiliserai donc l'opérateur i plus plus, cet opérateur post-incrémentation qui ajoute en place. Je l'exécuterai. J'ai donc une matrice by. Notez que nous incrémentons ligne par ligne, et non colonne par colonne. C'est important pour une autre méthode d'indice que nous allons voir apparaître. Nous incrémentons donc ligne par ligne. Maintenant, que se passe-t-il si je veux une séquence allant jusqu'à ? Eh bien, il existe certainement de nombreuses façons de le faire. Mais une méthode rapide serait de multiplier chaque élément de la matrice que je viens de créer par. Et encore une fois, nous pouvons vectoriser ces opérations. Je n'ai pas besoin de parcourir la matrice. J'affecte simplement -- et je vais faire une autre affectation en place -- m, puis l'astérisque est égal, donc la multiplication est égale à. Nous n'avons pas besoin de le faire en place. Mais plutôt que de créer une nouvelle variable, je vais faire cela. Donc, encore une fois, je n'ai pas besoin de boucle. Cela va multiplier élément par élément par et j'exécute cela. Et donc il y a cette matrice qui va de à par incréments de Maintenant, une autre façon de créer cette matrice serait en deux étapes, en commençant par la fonction index. Donc, je vais effacer ce qui est dans la fenêtre de l'éditeur de script. Je vais continuer et effacer également le journal. Et dans la fenêtre de l'éditeur de script, je vais saisir m. Et cela se verra attribuer la valeur résultant de la fonction index - index ouvre des parenthèses. Et nous commencerons à Nous allons compter jusqu'à Le troisième argument facultatif, que j'utiliserai ici est l'incrément. Donc, nous allons par Voici donc la première étape de la création de cette matrice que nous avions la matrice by. Donc, nous créons un vecteur ligne en utilisant la fonction index. Et ensuite, je peux mettre en forme cela. Donc, je vais aller sur une nouvelle ligne. Je vais écraser m à nouveau. Donc m sera le résultat de la fonction shape, qui prendra m comme premier argument et modifiera ses dimensions pour avoir cinq lignes et cinq colonnes. Il faut être très prudent avec cette fonction shape. Si votre vecteur ligne ne correspond pas à une matrice carrée que j'ai spécifiée ici, JMP tronquera ce vecteur si la matrice spécifiée avec shape est trop petite. Ou si vous spécifiez une matrice plus grande, le vecteur commencera simplement à se répéter. Soyez donc prudent lorsque vous utilisez la fonction shape. Je veux donc l'exécuter. Et voici à nouveau cette matrice carrée, allant de à par incréments de. Maintenant, une partie de la raison pour laquelle je voulais faire cela, outre le fait qu'il existe généralement de nombreuses façons de tout faire dans JMP, est de parler d'une autre façon d'inscrire. Nous avons vu les indices ligne par colonne. Et je veux parler de l'indice unique que vous verrez parfois. Donc, si je voulais… nous pouvons utiliser la fonction contains avec… nous l'avons vu avec des chaînes de caractères. Vous pouvez l'utiliser avec des listes. On peut l'utiliser avec des matrices. Si je veux trouver l'emplacement du nombre m dans la matrice, eh bien, si je le décrivais, je dirais : « OK, c'est ligne colonne ». J'utiliserais donc un indice virgule. » Mais si je demandais à JMP de le trouver pour moi, j'utiliserais simplement « contient ». Et encore une fois, en pratique, votre script pourrait affecter ce résultat à une variable. Je n'ai pas besoin de le faire ici : « contient » puis « m » virgule. JMP ne va pas me donner… Il va me donner une valeur unique. Eh bien, comment fonctionne cette valeur unique ? L'indice à valeur unique… donc si je revenais… je vais aller à une nouvelle ligne ici, saisir « m » puis les crochets avec un indice à valeur unique et exécuter cela. C'est… L'indice à valeur unique va traiter ma matrice comme s'il s'agissait d'un vecteur ligne et commencer à compter à partir de la première position. Ainsi, lorsque nous revenons au journal pour voir le résultat de ma fonction d'index, cet indice unique le traite comme un vecteur ligne et compte ligne par ligne, tout comme nous l'avons incrémenté, pour obtenir l'emplacement de cette valeur. Nous verrons d'autres exemples, lorsque nous travaillerons avec des matrices, où JMP nous renvoie cet indice unique. La dernière chose que nous ferons ici est un calcul arbitraire pour illustrer qu'il existe des fonctions qui peuvent prendre des matrices comme arguments, des fonctions de calcul. Nous avons déjà vu la fonction shape et contains. Mais je vais passer à une nouvelle ligne et saisir log puis m comme argument divisé par. Autre point concernant cet exemple : laissez-moi l'exécuter. Ensuite, je vous expliquerai l'autre point concernant cet exemple. Je viens d'effectuer ce calcul sur chaque élément et de le diviser par. L'autre point que je souhaite souligner est qu'en JSL, les fonctions peuvent prendre des fonctions comme arguments. Nous le verrons tout au long du processus. Nous avons déjà vu quelques exemples. Cet opérateur de division est en réalité la fonction de division qui prend le logarithme de m comme argument. Je n'ai pas besoin de calculer le logarithme de m et de le stocker dans une variable pour le fournir à la fonction de division. Je peux effectuer ce calcul directement. Si j'écrivais la fonction, cela ressemblerait à une division avec des parenthèses ouvrantes. Remplacez l'opérateur par une virgule et des parenthèses fermantes. Je n'ai donc pas besoin de fournir une variable stockant ces valeurs. Je peux les calculer pendant l'exécution de la fonction de division. Voici donc quelques exemples de listes et de matrices et quelques-unes des façons de travailler avec ces types particuliers de structures de données.