読者です 読者をやめる 読者になる 読者になる

Mukku John Blog

取り組んでいること を つらつら と

Rプログラミング入門 2回目

 Rプログラミング入門 2回目。関数と元に戻すサンプリング。

 

 関数

関数の使い方は「R」言語だからといって、特別に異なることはなさそうです。

他の言語と同じです。

 例

  • round関数:丸める
  • factoial関数:階乗 ⇒ factorial(3) = 3 * 2* 1

 

IDEの違いだけ。

RStudioは、関数の候補と、選択している関数の候補の説明を表示してくれます。

R Tools for Visual Studioは、関数の候補まで表示してくれます。「()」まで入力した後で、関数の説明を表示してくれます。

 

RStudio

f:id:MukkuJohn:20160621213135p:plain

R Tools for Visual Studio

f:id:MukkuJohn:20160621213146p:plain

 

元に戻すサンプリング

sample関数の使い方に沿って、進んでいきます。

RStudio

f:id:MukkuJohn:20160621214130p:plain

R Tools for Visual Studio

f:id:MukkuJohn:20160621214152p:plain

関数の説明を見ると、4つの引数が必要な関数です。

  • x
  • size
  • replace = FALSE
  • prob = NULL

本の通りに進めると、サイコロを2回振った時をシミュレートしたいそうです。

事前準備として、オブジェクト die に 1:6 のベクトルを入れておきます。

RStudio

f:id:MukkuJohn:20160621214643p:plain

f:id:MukkuJohn:20160621214651p:plain

R Tools for Visual Studio

f:id:MukkuJohn:20160621214711p:plainf:id:MukkuJohn:20160621214726p:plain

(存在しているオブジェクトを確認するには、Visual Studioの方が見やすいかも)

 

繰り返しますが、サイコロを2回振った時をシミュレートします。

それには、sample関数の引数xにdieオブジェクトを渡し、引数sizeに2を渡せばよいみたいです。

5回ずつ繰り返します。

1つ前のコマンドを入れるには、どちらのIDEも↑キーで出てきます。

(ついでに、どちらのIDEもCtrl+Spaceで候補が表示されます。)

RStudio

f:id:MukkuJohn:20160621215400p:plain

R Tools for Visual Studio

f:id:MukkuJohn:20160621215423p:plain

なんだか、sample関数の説明みたいな項ですね。

ただ、気を付ける点としては、「サイコロを2回振った時をシミュレート」ですが、

sample関数の上記の使い方ですと、1回目の抽選後に、1回目に選択された要素を除外して、2回目の抽選に入るみたいです。

 

なので、RStudio側の1回目を例にとると、

1回目の要素の抽選:1,2,3,4,5,6の中から1つ抽出する ⇒ 5が選ばれる

2回目の要素の抽選:1,2,3,4,6の中から1つ抽出する ⇒ 3が選ばれる

 

これでは、サイコロを2回振った時をシミュレート」になりません。

そこで、sample関数の「replace = FALSE」と記載されている引数を用います。

他の言語と同様に、引数=○○と記載されている引数は指定しなくても、規定値でその○○の値が用いられます。

 

なので、sample関数のreplace引数は、必ず指定する必要はなく、指定されていない場合は、FALSEで動作します。(もちろん、あえてFALSEで指定することもできます。)

引数replaseをTRUEで指定して実行します。

 

RStudio

f:id:MukkuJohn:20160621220543p:plain

 

R Tools for Visual Studio

f:id:MukkuJohn:20160621220604p:plain

引数replaceをTRUEで指定することで、「1:6」ベクトルから毎度抽選してくれるようになりました。

 

今日はここまで。

 

追記。

本には、「1or2個目以降の引数は、名前を書くようにすべき」と記載されています。

その理由に、「とってもコードが読みやすくなる」と。さらに「通常、第1引数はだいたい自明」であると。

・・・あいまいすぎるので、

・必ず指定が必要な引数は、名前を付けません。

・規定値を取る引数は、名前付きで指定します。

として進めていきます。