ライブラリ
ここまで色々な関数を定義してきましたが,これらの関数を1つのファイルにまとめたものがライブラリと呼ばれるものです。そしてこのライブラリを特定の約束事に従って一般公開できるようにしたものをモジュールといいます。
1. パッケージ
Perlには名前空間という概念が存在します。名前空間とは"ある変数の有効範囲"とでも考えておけば良いでしょう。例えば下のプログラム例をみてください。
-プログラム例
package main; #mainパッケージは省略できる $x=999; print "main=$x \n"; package non_main; #non_mainパッケージを宣言 print "non_main=$x \n"; package main; print "main=$x \n";
-出力結果
C:\Perl>sample.pl main=999 non_main= main=999
2. 関数の正しい呼び出し方
ところで,ライブラリや関数(subルーチン)を呼び出すときには
&stat::mean();
&function();
のように&(アンド)を付けてはいけないそうです(私も詳しい理由は知らない)。
3. モジュールの使い方
どのようなモジュールがあるかは以下のwebサイトなどを参考にするとよいでしょう。
http://www4.kcn.ne.jp/~felix/Softwares/MathPPM/
今回は試しにStatistics::Distributionsというモジュールを使ってみることにします。コマンドプロントで次のようにコマンドしていきます(赤い文字の部分)。
C:\>ppm
PPM - Programmer's Package Manager version 3.3.
Copyright (c) 2001 ActiveState Corp. All Rights Reserved.
ActiveState is a division of Sophos.
Entering interactive shell. Using Term::ReadLine::Perl as readline library.
Type 'help' to get started.
ppm> install Statistics-Distributions
====================
Install 'Statistics-Distributions' version 1.02 in ActivePerl 5.8.7.815.
====================
Downloaded 5383 bytes.
Extracting 6/6: blib/arch/auto/Statistics/Distributions/.exists
Installing C:\Perl\html\site\lib\Statistics\Distributions.html
Installing C:\Perl\site\lib\auto\Statistics\Distributions\autosplit.ix
Installing C:\Perl\site\lib\Statistics\Distributions.pm
Successfully installed Statistics-Distributions version 1.02 in ActivePerl 5.8.7
.815.
ppm> exit
ここで1つ疑問が湧きます。Statistics::Distributionsというモジュールはいったいどこにインストールされたのかということです。その疑問を解決するために次のスクリプトを実行してみてください。
スクリプト
$, = "\n"; print @INC;
実行結果
C:\Perl>sample.pl C:/Perl/lib C:/Perl/site/lib
つまり"C://Perl/lib"か"C://Perl/site/lib"というフォルダの中にインストールしたモジュールが入っているということです。恐らくは後者のlibというフォルダの中にStatisticsという名前のフォルダがあり,その中にDistribution.pmというファイルが保存されているはずです。
このDistribution.pmというファイルを開いてみると,どのような関数(subルーチン)が含まれているかを確認することができます。また使用例も448行目以降に書かれています。
Statistics::Distributionsの中にある関数
+-----------------------------+
|上側確率からパーセント点を求める|
+-----------------------------+
udistr(p) ・・・ 標準正規分布において,上側確率pとなるときのパーセント点を返す
chisqrdistr(df,p) ・・・ 自由度dfのカイ二乗分布において,上側確率pとなるときのパーセント点を返す
tdistr(df,p) ・・・ 自由度dfのt分布において,上側確率pとなるときのパーセント点を返す
fdistr(df1,df2,p) ・・・ 自由度df1,df2のF分布において,上側確率pとなるときのパーセント点を返す
+-----------------------------+
|パーセント点から上側確率を求める|
+-----------------------------+
uprob(x) ・・・ 標準正規分布において,パーセント点xの上側確率を返す
chisqrprob(df,x) ・・・ 自由度dfのカイ二乗分布において,パーセント点xの上側確率を返す
tprob(df,x) ・・・ 自由度dfのt分布において,パーセント点xの上側確率を返す
fprob(df1,df2,x) ・・・ 自由度df1,df2のF分布において,パーセント点xの上側確率を返す
〜使用例〜
use Statistics::Distributions; $a=Statistics::Distributions::chisqrdistr(2,0.05); print $a; print "\n"; $b=Statistics::Distributions::uprob(1); print $b;
〜結果〜
C:\Perl>sample.pl 5.9915 0.15866
以上の2つはRで
> qchisq(0.95,2) [1] 5.991465 > 1-pnorm(1) [1] 0.1586553
とするのと同じことです。