ブール関数の使用

このデモでは、ブール関数とIf関数について見ていきます。まずスクリプトエディタウィンドウを開きます。キーボードショートカットはCtrl+Tです。または、「ファイル」メニューのツールバーを使うこともできます。新しいスクリプトエディタウィンドウを開く方法はいくつかあります。ログをジャーナルの前に表示します。スクリプトエディタウィンドウに戻り、変数xに値を代入するコードを入力します。そして、これを初期化します。そして、新しい行で比較を行います。JSLの特徴の1つは、比較演算子を使用して引数を結合し、JMPにそれらを1つの節として処理させることです。「less than x less than equal」と入力した場合、これは順番にではなく一度に評価されます。これは、JMPがこのように結合された比較演算子を省略演算子と呼ぶためです。この行を実行すると、もちろん、より大きいか以下であるかが真の比較になります。結果としてブール値が得られます。比較関数の最も一般的な使用法は、特定の条件をテストする場合、たとえば If 関数で使用する場合です。最初の行を変更して、 を に置き換えます。 の値を x に代入します。次に、2 行目全体を If 文に置き換えます。つまり、括弧で囲んだ場合、x がコンマより小さい場合、返される結果は制限以下の文字列になります。これは単純な if/then 文です。条件が true と評価された場合、この結果を返します。条件が false と評価された場合、2 番目の引数は評価せず、欠損値を返します。それでは、このスクリプト全体を実行します。この場合も、キーボード ショートカットは Ctrl+R です。つまり、x に値が格納されている場合は、それがより小さいので、この結果が得られます。しかし、xに代入した値を に変更してスクリプト全体を実行すると、条件が満たされなかったため、欠損値が得られます。ここでも、elseの結果を得ることができます。つまり、条件が満たされなかった場合、欠損値の代わりに、別の結果を返します。ここで、二重引用符を開いて「Over the limit」と入力します。スクリプト全体を実行すると、elseの結果が得られます。つまり、If関数は必要な数の条件と結果を取ることができ、すべての条件が偽と評価された場合でも、elseの結果を得ることができます。次の例では、人々の年齢の表を取り出し、エリック・エリクソンの心理的発達段階の1つに分類します。セクションのジャーナルに戻り、「年齢データ」をクリックします。個人が1人ずつ存在し、それらを心理的発達のこれらの段階に分類したいとします。再びジャーナルに戻り、「年齢から段階へのスクリプト」をクリックします。このジャーナルのスクリプトは、データテーブル「Age」に「New Column」メッセージを送信します。列のタイトルは「Stage」で、データ型は「character」と指定します。列を作成したら、「for each row」関数を使ってIf文で列に値を入力します。JMPがIf文で条件が成立すると、対応する結果のみが評価されます。他の条件は評価されません。つまり、年齢が「18歳」の場合、これらの年齢比較はすべて成立しますが、「Yes」が「より大きい」と評価されると、反復処理のコンテキストで処理するため、「Late Adult」の結果を返して次の行に進みます。このように、各レベルを括弧で囲む必要はありません。「より大きい」「より大きい」「より大きい」などと記述すれば良いのです。ここで一つ考慮すべき点があります。データを見ると、このケースでは、ほぼ均一に分布していることがわかります。しかし、データを見て、高い方の観測値が多い傾向、あるいは低い方の観測値が多い傾向に気づいた場合、それが分布の端からビン分割を開始することになります。なぜなら、データテーブル内の年齢よりも高い年齢の人が多数いる場合、データテーブルは多くの行でこの1つの条件を評価し、その結果を返して、他のすべての条件を評価するのではなく、反復処理の次のステップに進むからです。つまり、どの行でも、そして繰り返しますが、もしそれが大多数の人がその年齢を超えている場合は、真の結果が見つかった時点で次の反復処理に進むことで、スクリプトの処理速度を少し上げることができます。それでは、スクリプトを実行してみましょう。列が作成され、If文を使用して値が入力されているのがわかります。ここで説明する他の2つの関数は、論理関数と照会関数です。多くの場合、一度に複数の条件をテストする必要があります。これは、条件を論理的に組み合わせることで実現できます。論理関数の例としては、AND 関数と OR 関数が挙げられます。AND 関数はアンパサンド演算子を使用して、すべての条件が真であることを保証します。OR 関数は垂直パイプ演算子を使用します。これにより、少なくとも 1 つの条件が真であることを保証します。そこで、Age to Stage スクリプトがあるスクリプト ウィンドウを使用して、これをクリアします。x にはセミコロンの値が割り当てられ、y には別のセミコロンの値が割り当てられるように定義します。すべてを 1 行に入力して、再フォーマットによってクリーンアップされるようにします。つまり、括弧で囲まれた場合、x はより小さい、OR の演算子は縦棒、つまり垂直パイプです。x はより小さい、または y はより大きい、となります。これが条件です。そこにカンマを入力します。これらのいずれか、または両方が真の場合、条件が満たされたという結果を返します。どちらも真でない場合は、条件が満たされていないという文字列として結果を返します。最後にもう一度セミコロンを入力します。これはベストプラクティスですが、スクリプトをセミコロンで終わらせる必要はありません。右クリックして書式設定をします。これで、すべてを1行に入力した後、少し整理できます。スクリプトを実行すると、2つの条件のうち少なくとも1つが満たされ、最初の条件が満たされたという結果が返されるはずです。そして、実際にログに記録されたのがこれです。両方の条件が満たされる必要がある場合は、縦棒演算子をアンパサンドに置き換えます。この場合、1つの条件のみが満たされ、両方が満たされることはありません。つまり、elseの結果が返されるはずです。実行すると、ログにこれが表示されます。先ほど言及したもう1つのタイプの関数は、照会関数です。値の性質を確認したい場合があります。例えば、値が数値なのかリストなのかを確認する必要がある場合などです。値には様々な種類があります。場合によっては、変数に間違った種類の値が格納されている状態でスクリプトを実行しようとするとエラーが発生することがあります。そのため、その変数の値の性質に応じてスクリプトが何らかの方法で実行されるか、あるいはその変数の値の性質に応じてスクリプトが何らかの方法で実行されるかを確認する必要があります。そこで、スクリプトエディタの内容をもう一度クリアします。最初の行では、x行列に代入します。x、代入関数、角括弧、スペース、カンマを入力します。これが最初の行です。スペース、これが2行目です。角括弧を閉じ、セミコロンを入力します。これをif文のコンテキストで実行します。また、JSLの関数には自動補完機能があることもお見せします。関数の最初の数文字を入力します。この場合、照会関数はすべて「is」を表すISで始まります。Ctrlキーとスペースバーを押します。このリストを下矢印キーで操作して、必要な照会関数を見つけます。今回は「行列」を使用します。Enterキーを押して選択すると、JMPが自動的に関数を補完します。もちろん、括弧を開く必要があります。括弧の中にxを入力し、括弧を閉じます。そして、If文の閉じ括弧の前にカンマを入力します。すると、条件が満たされた場合、閉じた二重引用符、カンマ、開いた二重引用符、条件が満たされなかった場合と同じ結果が表示されます。矢印キーを押して、全てが揃っていることを確認し、右クリックして書式を変更します。この場合、xには行列が格納されています。つまり、この最初の結果が返されるはずです。スクリプトを実行すると、実際にこの結果が返されます。しかし、xに格納されているのが文字列だった場合、スクリプトは異なる動作をするものとします。これはユーザー入力かもしれませんし、データテーブルなどから取得された文字列かもしれません。では、ここで「matrix」という単語を「string」に変更して、スクリプトを実行します。すると、条件が偽と評価されたため、当然ながらelseの結果が返されます。ここでは、ブール関数でIf関数を使ってデータをビンに分割する例や、If関数を論理関数や問い合わせ関数と組み合わせて使用する例をいくつか見てきました。