プログラミング

S言語でのプログラミングは関数(群)の作成と等しくなります。 勉強するには、既成の関数がどう書かれているのか見ることが、 役に立ちます。括弧を付けずに関数(オブジェクト)名を入力すれば、 内容をみることができます。 なお、形式的な関数定義のありようについてには これを参照して下さい。 (初めての人には、わかりにくい。むしろ実例をたくさん見て下さい。)

制御構文

条件式

if(条件) 式 もし、条件が真ならば式を評価する
if(条件) 式1 else 式2 条件が真ならば式1を偽ならば式2を評価する
ifelse(論理ベクトル,真,偽) 論理ベクトルの真偽に従い、真と偽のベクトルから要素を選択したベクトル
switch(数値変数, 式1, 式2,..., 式n) (切捨て整数化した数値変数+1)番目の式を評価する。 対応した番目の式がなければNull。
switch(文字列変数, 名前1=式1, 名前2=式2,..., 名前n=式n, 式) 文字列変数と等しい名前の式を評価する。 対応した名前の式がなければ名前無しの式を評価する。 名前無しの式がなく、かつ、対応した名前の式がなければNull。
注:if や 次の while の"条件"は単一の論理値をとる式でないといけない。 たとえば、X==1などはもしかしたら、論理ベクトルかもしれない ことに注意すること。

反復

for(名前 in 値 ) 式 値の各要素が順に名前に付値され式が反復評価される
repeat 式 式の評価を限りなく続ける
while( 条件 ) 式 条件が真である限り式を評価する

流れの制御

break for , repeat , while ループ外への飛び越し
next ループの先頭への飛び越し。ループは終了しない
return( 式 ) 関数評価の終了
stop( メッセージ ) メッセージを表示して関数評価の強制終了
warning( メッセージ ) 警告メッセージを表示
( 式 ) 式のグループ化 (評価順序の指定 )
{ 複合式 } 式のグループ化(関数のような複合式)

再帰

再帰呼出しは、関数定義の中で、自分を使えばできます。
例: fact <- function(x) if(x<=1)x else x * fact(x-1)
関数定義中で、それ自身の関数名を使いたいくない場合には、以下が用意されています。
Recall(再帰呼出しの際に渡す引数) この関数は,関数中で呼び出されると,呼び出した関数の関数定義を探し,そ れを与えられた引数を用いて再帰的に呼び出す。この関数を用いなくても再帰 呼出しを行えるが,この関数を用いれば関数名によらない再帰呼出しが行える。
例: fact <- function(x)if(x<=1)x else x * Recall(x-1)


デバッグ

S言語には、以下のような、強力なデバック用の関数が用意されています。 自作関数がエラー終了した場合にはデバッグの例 を参照のこと。
traceback() エラー発生時の関数呼び出し状況を表示する。
browser() 関数の実行を一時停止させ、引数に与えたもの (省略時にはbrowserを呼び出した関数の評価フレーム)の内容を調べる。 (詳しくは help(browser.default)を参照の事 )
debugger() 事前にOptions関数で設定をしておけば、エラーが起きた後で そのエラーが発生した環境を調べられる
trace(関数名) 指定した関数の呼び出し状況をtraceする。