Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?すべてを実際のスクリプトにつなぎ合わせる方法を学ぶ準備はできましたか?スクリプト作成の基本に関する私のシリーズへようこそ。 JMP 。 これは、あなたが一緒に取り組むことができるように構成されたシリーズの 5 番目のエントリです。 私たちに参加したばかりの場合は、以前のエントリを実際に見てみるとよいでしょう。シリーズ、これはヤバイからです。 確認できるリンクは次のとおりです。
わかった? まだここ? 前のエピソードを見ましたか? 素晴らしい! 栄光へ向かって突き進みます!
数週間前の宿題から、私たちは皆、スクリプトの保存スクリプトウィンドウへまたは、Scripting Index を使用して必要なコードを入手します。 あなたした宿題をして、右? 良い! すべてを実際のスクリプトにつなぎ合わせてみましょう。 でもその前に、ちょっと話をしなければなりません。
マイキーのコーディングペットの 1 つイライラする
大丈夫、みんな。 ちょっとの間、石鹸箱に立ち上がって、何かについて話させてください。 コードを書くときは、次のことを行う必要があります。いつもコメントしてください! 私たち自身を含め、私たちの後にコードを読む人について、いかなる仮定もすることはできません。
大学に戻って、私は Visual Basic コーディングのクラスを受講しました。 私たちが最初に学んだのは、コードにコメントを付けて擬似コードを記述する方法でした。 ちなみに、疑似コードとは、コードを書く前に、何をする必要があるかを計画するのに役立つコメントです (疑似コードは、私が書いてもらったパンチリストに似ています)その最初の投稿)。 講師は、コメントと疑似コードを「コーディング コミュニティの善良な市民であること」と呼びました。提出したコードにどれだけコメントしたかによっても評価されました。 それはとても重要なことなのです。
実のところ、コードを誰が閲覧するかを完全に制御できることはほとんどありません。 好例: このブログ シリーズでは、他の人のアドインをリバース エンジニアリングする方法を段階的に説明しました。 これらのアドインを作成した人の一部 (ほとんどではないにしても) は、他の人がコードの内部を覗くことを期待していなかったはずです。 また、何が起こっているかを理解するのに役立つコメントがコード内に期待されているほど多くないことも保証します。
後で見た人がコードを簡単に理解できるように、コードにコメントを付ける必要があります。 はい、コメントするのは面倒です。 そして、はい、余分な時間がかかります。 しかし、いいえ、それをスキップすることはできません。 それは長期的には利益をもたらすでしょう。 そして私はここで説いていることを実践しています。 5 年前に作成したアドインがありますが、詳細にコメントを付けたので今でも理解できます (そして、それを行うのがどれほど面倒だったかを今でも覚えています!)。
したがって、すでにコードを作成している人は、コードにコメントを付けて、他の人が何をしているのかを理解できるようにしてください。 学習中の人は、コードに大量のコメントを付ける習慣を身につけ、その習慣を維持してください。 では、この石鹸箱から降りて、その方法を説明しましょう。
JSLでコメントする
JMP を開いて、これまで使用してきた Big Class Families.jmp データ テーブルを開いてみましょう。 前回のセッションのスクリプト例を保存していない場合は、再作成してください。 次のようなものが表示されるはずです。

JSL コードにコメントを挿入するには 2 つの方法があります。 1 つ目は、二重スラッシュ (「//」) を使用して個々の行をコメントアウトする方法です。 スラッシュ以降、キャリッジ リターン (キーボードでリターンを押す) までの内容はすべて無視されます。 私は通常、短いインライン コメントを行うためにこの方法を使用します。 実行したくない単一行のコードをオフにすることも便利です。 それが何を意味するのか見てみましょう。

コメントする 2 番目の方法は、コードの大きなブロックをオフにする場合、またはコメントとテキストの大きなブロックを生成する場合に使用します。 このタイプのコメントはコメント ブロックと呼ばれます。 これは、スラッシュとアスタリスク (「/*」) で構成される開始コメント フラグと、アスタリスクとスラッシュ (「*/」) で構成される終了コメント フラグを使用して行われます。 これがどのように使用されるかの例を次に示します。

コメントについて議論しているわけではないことに注意してくださいスタイルここ。 それは実際にはあなた次第です。 やっていくうちに独自のスタイルが確立され、目的に応じて異なるコメント スタイルを使用することもできます。 私のインライン コメント (例にあるものなど) は、アプリケーションなどで行うコメントとはまったく異なります。 重要なのは、コメントを記述し、スクリプト内でその実行方法と内部的に一貫性を持たせることです。
このシリーズ全体で最も難しい部分
実際、このシリーズ全体が次のアイテムにつながっています。 JSL を始めるには、知っておくべき重要なことが 3 つあります。 1つ目はコメントすることです(この記事の前半の説教を参照)。 2番目と3番目は、物事に名前を付ける方法とメッセージの送り方彼らへ。
独自の ANOVA アルゴリズムをコーディングすることは可能だと思います (私の同僚がそれについて非常に面白い話をしてくれました)。 ただし、前のエピソードで学んだように、メッセージを通じて Fit Y by X を使用して ANOVA を実行するようにデータ テーブルに指示する方がはるかに簡単です。 この基本的なワークフロー (何かに名前を付け、それにメッセージを送信する) が、JSL の本質の多くを占めています。 はい、ロジックやループ、GUI 開発などに取り組むことはできますが、ブルート フォース スクリプトに実際に必要なのは、名前、メッセージ、そしてスクリプト インデックスを少し検索することだけです。
物に名前を付ける
物に名前を付けることから始めましょう。 名前を付けるには、JMP の後に等号を付けて名前を付け、その名前で表すテキスト、数値、コードなどを記述します。 名前は と呼ばれます変数。 変数は、内容を入れることができるコンテナ、または開いているレポートのニックネームとして考えることができます。 JMP 。
ANOVA を使用した例を見てみましょう。 ANOVA のコードを作成するには、まず [Fit Y by X] ([分析] の下) で分析を実行し、次に ANOVA テストをオンにして、コードをスクリプト ウィンドウに保存します。 Big Class Families.jmp を使用したレポートと、赤い三角メニューから保存された結果の JSL コード (身長を Y、性別を X、選択したもの) を次に示します。平均/分散分析/プールされたt赤い三角の下) :


この小さな JSL スニペットは、元のデータ テーブルと同じ列名を持つデータ テーブルの ANOVA を生成します。 (ただし、このシリーズではパラメーター化については心配しません。 ちょっと範囲外です。)
さて、多数のデータ テーブルが開いていて、その ANOVA を実行するデータ テーブルを制御したい場合はどうすればよいでしょうか? スクリプトを編集するには、ANOVA を実行するデータ テーブルに名前を付け、JMP で生成されたコードをメッセージとして送信します。 Scripting Index (ヘルプの入手に関する記事を参照) を参照すると、これを行う方法がいくつか見つかります。 データテーブルを直接呼び出すことも、Current Data Table() を使用して JMP が現在注目しているデータテーブルへの参照を取得することもできます。 もう少し高度な 3 番目のオプションがあります。このオプションでは、データ テーブルを開くときに名前を付けます。 以下に 3 つすべての例を示します (情報を伝えるためにコメントを使用することにもう一度注意してください)。

データ テーブルを名前で呼び出すことは、使用しようとしている名前を持つデータ テーブルが開いている限り機能します。 これは、作業対象となるデータ テーブル名のリストがある場合に便利です。 データテーブルを非表示または最小化している場合にも便利です。 どちらの場合でも、データ テーブルが必ずしも表示されない場合でも、データ テーブルにメッセージを送信できます。 このメソッドは次の形式を使用します。
<変数名> = Data Table(“<データテーブル名>”);
おそらく、今回の目的のために変数をデータ テーブルに割り当てる最も便利な方法は、Current Data Table () 関数を使用することです。 この関数は、アクティブなデータ テーブルまたは現在のデータ テーブルを取得し、それを指定した変数に割り当てます。 テーブルが変数に割り当てられると、別のデータ テーブルが「現在」になっても問題ありません (たとえば、集計テーブルを作成すると、変数を再定義するまで常に最初のデータ テーブルへの参照が得られます)。 より単純な形式になります。
<変数名> = 現在のデータテーブル();
最後の方法は、誰かがスクリプトを実行するときにデータ テーブルが開いていない可能性があると想定する場合に便利です。 このメソッドを使用すると、JMP はユーザーが開きたいファイルを選択できるファイル ダイアログを生成します。 ユーザーが選択を確認すると、ファイルが開かれ、指定した変数名が割り当てられます。 繰り返しますが、これは単純な形式です。
<変数名> = Open();
の使用開ける(…);ファイル パスとディレクトリの作業に慣れている場合は、このメソッドも便利です。 次のように、かっこ内にファイル パスを入れて、JMP にファイルを検索する場所を指示できます。

また、私は と呼ばれるものを使用していることに注意してください。パス変数の中に開ける(…);文字列を短くするコマンドです。 にそれらに関するセクションがありますスクリプトガイド。
メッセージの送信
名前を付けたら、それにメッセージを送信できるようになります。 携帯電話で誰かにテキスト メッセージを送信するのと同じように機能します。 テキストメッセージを送信するとき、最初に知っておく必要があるのは、受信者の名前、電子メールアドレス、または電話番号など、受信者を識別できるものです。 それをメッセージング アプリに入力して、メッセージを送信します。 Big Class ANOVA を使用してそれを行う方法は次のとおりです。 この場合は、少し楽しんで、JMP にファイルを開くように依頼してみます。

ここに表示されている内容を 5 行目から展開してみましょう。 最初に表示されるのは、指示を与えるデータ テーブルの変数名です。 誰かにテキストメッセージを送ったり、指示を与えたりするときと同じように、誰と話しているのかを識別する必要があります。 次に、「未満」記号 (<<) が 2 つあります。 このようなことは、Glue Operator ですでに見てきました (;)。 「<<」記号はメッセージ演算子と呼ばれます。 これにより、メッセージの受信者に、次に続く内容がメッセージであることがわかります。 その後、Oneway(…); という関数が表示されます。関数が ANOVA レポートを作成するために必要な引数を指定します。 注: その関数のオプションに関するすべての情報は、ドキュメントまたはスクリプト索引で入手できますが、実際に手書きで記述する必要はありません。 分析を一度実行し、次のいずれかを使用して完成したスクリプト (すべてのオプションを含む) を取得するだけです。スクリプトの保存先...先ほど紹介したコマンド。
いくつかのオッズアンドエンド
最後に、対処する必要がある詳細が 3 つあります。 1つ目は、物事をつなぎ合わせるという問題です。 たとえば、ANOVA を実行し、同じスクリプトでグラフ ビルダーを作成したい場合は、JMP に対して、さらに指示に従うことを警告する必要があります。 これを行うには、私が繰り返し言及している Glue 演算子 (;) を使用します。

英語の書き言葉のセミコロンと同様に、コマンドの末尾のセミコロンは、JMP にまだ命令があることを知らせます。 Glue は Bivariate(...) のような命令の最後にあります。 ; 、または分布(...) ; 、または何かに名前を付ける: スタッフ = 5 + 6 ; 。 以前の投稿を思い出していただいたかもしれませんが、JMP では、使用時にセミコロンが自動的に含まれます。スクリプトを保存…スクリプト ウィンドウへしかし、フリーハンドでスクリプトを作成する場合、これがスクリプト作成中に犯す最も一般的なエラーです。つまり、物事をつなぎ合わせるのを忘れるということです。
2 番目の詳細は、スクリプトが JMP セッション内で善良な市民であることを確認することです。 これは、作成したすべての変数を名前空間。 ネームスペースは、作成した変数名がソフトウェアの他の部分に干渉しないようにする小さなサンドボックスです。 デフォルトの名前空間は「Here」名前空間と呼ばれます。 スクリプトでは次のようになります (2 行目を参照)。

変数名が他のスクリプトや JMP の一部と衝突しないようにするために、この命令は常にスクリプトの先頭に置く必要があります (どのような場合に使用すべきではないかがわかるまで)。 この点で髪を抜き始める前に、私が今言ったことのTL;DRバージョンを以下に示します: 常に「Names Default To Here(1);」と入力することを忘れないでください。スクリプトの最初に入力すれば、当面は問題ありません。 名前空間について詳しく知りたい場合は、このトピックに関する段落を参照してください。私が少し前に書いたこの他の投稿。
最後に説明する必要がある詳細は、保存されたスクリプト内の列名を変更する方法です。 とてもシンプルです。 保存したスクリプトを見てください。 列名の前にコロン (「:」) が付いていることが表示されます。 このコロンは列名であることを示します (他の意味も考えられますが、ここでは列名を意味します)。 列名を変更するには、単に変更するだけですが、先頭にコロンを付けることを忘れないでください。 列名に特殊文字が含まれている場合、JMP がスクリプトを出力するときに、:Name(“…”) のようなエラーが発生する可能性があります。 このようにして、JMP は、列名に文字列の一部であることが明確でない場合に問題を引き起こす可能性のある文字が含まれているという事実を処理します。 スクリプトで :Name(“…”) を使用するのは間違ったコーディング形式ですが、ソフトウェアには選択の余地がないため、それが使用されます。 より適切な列名を選択するようにしてください。
でも、あなたは忘れてしまいました...
OK、この時点で少し緊張している人もいると思います。 「機能を忘れてる!!!」と思っているかもしれません。または「式についてはどうですか!!!」または、「あなたはツイット!!! あなたはロジックとループを完全に理解していません!」まず、悪口を言うのは良くありません。 第二に、私はそのことを何も忘れていませんでした。 私意識的に省略しました。
重要なのは、このシリーズは髪の毛を吹き飛ばすことを目的としたものではないということです。 シリーズの最初の方で言ったように、この本は正しい道を指し示し、良い地図、軽食、背中を押してもらい、行き詰まった場合にどこに助けを求めればよいかを示すことを目的としています。 それは出発点です。 (ところで、この時点で軽食をとる許可は得ています。)
定期的にスクリプトを作成する私たちにとって、ここで私が話していることの多くは非常に基礎的なものであり、非常に基本的なものであるため、筋肉の記憶になります。 私たちが忘れているのは、ここで説明する基礎知識を使用するだけで、初心者のスクリプタでも多くの領域をカバーできるということです。 とにかく、私が特別なことを取り上げていないために過呼吸になっている場合は、リラックスしてください。 次のシリーズでは、ウサギの穴の奥深くまで進んでいきます。 とりあえず、話を戻して今週の宿題について話しましょう。
宿題
よし、ここまでだ。 大きな宿題の練習。 今週は、先週作成したコードの一部を取り出して貼り合わせます。 これを一度に少しずつ行ってください。 スクリプトがデータ テーブルの外に (JSL ファイルとして) 存在する場合は、データ テーブルを開いて変数に入れることから始めます。 その後、スクリプトがどこに置かれるかに関係なく、少し追加して期待どおりの動作をすることを確認します。 次に、さらに追加して、期待どおりの結果が得られることを再度確認します。 コミュニティ、ヘルプ ファイルなどがあなたの友達であることを忘れないでください。 エラー メッセージが表示された場合は、ログを確認してください (表示 > ログパソコン用とウィンドウ > ログMacOS の場合)、および前のエピソード。
頑張ってください、また来週お会いしましょう!