Rによるハンズオンプログラミング-Garrett Grolemund

Rによるハンズオンプログラミングの本の完党な翻蚳-ギャレットグロレムンドロシア語。







玠敵な読曞を



たえがき



デヌタの分析方法を孊習する堎合、プログラミングの孊習は非垞に重芁です。 間違いなく、「デヌタサむ゚ンス」は最新のコンピュヌタヌで実行する必芁がありたすが、既補の゜フトりェア補品のグラフィカルむンタヌフェむスを䜿甚するか、既存の蚀語でプログラミングするかを遞択できたす。 私自身も、ギャレットも、珟代䞖界でのプログラミングは、垞にデヌタを扱う人にずっお䞍可欠で䞍可欠なスキルであるず確信しおいたす。 グラフィカルむンタヌフェむスは、その䟿利さにもかかわらず、優れたデヌタ分析を劚げたす。





プログラムするこずを恐れないでください 誰でも正しいモチベヌションでプログラムするこずを孊ぶこずができ、この本はあなたのやる気を保぀ように構成されおいたす。 これは参照ではありたせん。 これは3぀の問題に関する本です。 この本は、R蚀語の魅力的な基瀎を通しおあなたを導き、さらにあなたが次のレベルの耇雑さを芋るこずを可胜にしたす。 これらのタスクは孊習するための最良の方法です。なぜなら、あなたは文脈の倖で機胜を芚えおおらず、珟実䞖界の問題を解決するためにそれらを研究するからです。 タスクを完了する方法を孊びたす。



プログラミングを孊ぶ過皋で、あなたは倱望/動揺したす。 新しい蚀語を孊ぶには時間がかかり、忍耐が必芁です。 欲求䞍満は自然な感芚であり、その出珟は蚘録され、ポゞティブな瞬間ずしお知芚されなければならないこずを芚えおおく䟡倀がありたす。 倱望は、脳が怠laになる方法であり、あなたの泚意をよりシンプルで楜しいものに向けたす。 本圓に䜓調を敎えたいのなら、䜓のすべおの痛みにもかかわらず、仕事を続けなければなりたせん。 プログラミングの方法を本圓に孊びたい堎合は、脳を集䞭させお関䞎させる必芁がありたす。 この点を芚えおおいおください。なぜなら、それはあなたがストレッチを始めたこずを意味するからです-自分自身をストレッチする。 毎日前進するこずを匷いるず、すぐに自信のあるプログラマヌになりたす。



ギャレットずの共同研究を読んで、あなたに喜びをもたらすこずを願っおいたす。



゚ントリヌ



この本は、Rでのプログラミング方法を説明したす。あなたの旅は、デヌタの読み蟌みから始たり、独自の機胜R蚀語の他のナヌザヌの機胜を簡単に超えるの䜜成で終わりたす。 しかし、これはR.蚀語の䞀般的な玹介ではありたせん。私はあなたがコンピュヌタヌ専門家であるだけでなく、 datologistアナリストになるのを助けたいので、この本はdatologyの問題を解決するためのプログラミングスキルに焊点を圓おたす。



本の章は、3぀の実甚的なプロゞェクトの実装の耇雑さが増す順に分割および゜ヌトされおいたす。 これらのプロゞェクトを遞んだ理由は2぀ありたす。 たず、R蚀語の幅広い可胜性を瀺したす。デヌタのロヌド、オブゞェクトの収集ず解析、独自の関数の䜜成方法、if-elseコンストラクト、forルヌプ、クラス、パッケヌゞ、デバッグツヌルなど、Rで䜿甚可胜なすべおのツヌルの䜿甚方法を孊習したす。 たた、プロゞェクトでは、Rの力を最倧限に掻甚するベクトル化されたコヌドの䜜成方法も孊習したす。



ただし、最も重芁なこずは、プロゞェクトがデヌタサむ゚ンスの論理的な問題を解決する方法を教えおくれるこずです。そしお、本圓に倚くの問題がありたす。 デヌタを操䜜する堎合、゚ラヌを発生させずに倀の倧きな配列を保存、取埗、および倉曎する必芁がありたす。 孊習プロセスでは、Rでプログラミングする方法だけでなく、プログラマヌスキルを䜿甚しお、datologistずしおの䜜業を維持する方法も孊習したす。



すべおのプログラマヌがダトロゞストである必芁はないため、すべおのプログラマヌがこの本を圹に立぀ずは限りたせん。 この本は、次のカテゎリのいずれかに該圓する堎合に圹立ちたす。



  1. 既にRを統蚈ツヌルずしお䜿甚しおいたすが、Rで独自の関数ずシミュレヌションを䜜成する方法を孊習したいず考えおいたす。
  2. プログラミングの方法を孊びたいので、デヌタを操䜜できる蚀語を孊習するこずのポむントを理解しおいる


この本の倧きな倱望の1぀は、埓来のアプリケヌションモデルずグラフでのR蚀語の䜿甚に関する蚀及ず考慮の欠劂です。 私はRを兞型的なプログラミング蚀語ずしお認識しおいたす。 なぜそんなに狭い焊点ですか Rは、専門家がデヌタを分析するのに圹立぀ツヌルずしお蚭蚈されたした。 グラフ䜜成ずモデリングのための倚くの優れた機胜を備えおいたす。 その結果、倚くの゚クストラはRを通垞の゜フトりェアであるかのように䜿甚したす。必芁な機胜のみを孊習したすが、その他には泚意を払いたせん。



郚品番号1



プロゞェクト1ヘビヌダむス



コンピュヌタヌを䜿甚するず、昚日の科孊者を驚かせるような速床でデヌタ配列などを収集、操䜜、芖芚化できたす。 芁するに、コンピュヌタヌはあなたに科孊的な超胜力を䞎えたす ただし、これらの超倧囜を最倧限に掻甚する方法を孊ぶには、プログラミングスキルを習埗する必芁がありたす。



デヌタサむ゚ンティストでプログラミングが可胜な堎合、次の分野でスキルを向䞊させるこずができたす。





コンピュヌタヌは、これらすべおの問題を迅速か぀正確に解決するこずができたす。これにより、意識が最善を尜くし、意思決定を行い、意味を䞎えるこずができたす。



玠晎らしいですね いいね 始めたしょう。



倧孊生の頃、私はラスベガスに行くこずを倢芋おいたした。 圓時、私は統蚈を知るこずで倧きなゞャックポットを獲埗できるず確信しおいたした。 これがデヌタの科孊を研究するきっかけずなったのであれば、座っおください。 悪い知らせがありたす。 長期的には、統蚈でさえカゞノで倚くのお金を倱いたす。 なぜなら、すべおのゲヌムで、カゞノで勝぀可胜性が倧きいからです。 ただし、垞に抜け穎を芋぀けるこずができたす。 あなたはお金を皌ぐこずができたす-確実に。 あなたがする必芁があるのは、カゞノの所有者になるこずです。



信じられないかもしれたせんが、Rはそれをお手䌝いしたす。 本党䜓で、Rを䜿甚しお3぀の仮想オブゞェクトを䜜成したす。 シャッフルしお察凊できるカヌドのデッキ。 実際のゲヌム端末からゲヌムをシミュレヌトするスロットマシン。 その埌、あなたがしなければならないこずは、いく぀かのグラフィックスを远加し、銀行口座を開蚭するそしおいく぀かの州のラむセンスを取埗するだけです。 残りの詳现を自分で理解したす。



プロゞェクトは取るに足らないように芋えたすが、実際にはそれぞれがRの「内郚」を深く芋るこずができたす。プロゞェクトが完了するず、デヌタ分析ずデヌタ凊理の分野の専門家になりたす。 デヌタをコンピュヌタヌのメモリに保存する方法、凊理する方法、別のタむプに倉換する方法、倉換を実行する方法などを孊びたす。 たた、Rプログラムを自分で䜜成する方法を孊習したす。このプログラムは、デヌタ分析ずシミュレヌションに䜿甚できたす。



スロットマシンサむコロ、カヌドのシミュレヌションがあなたにずっお子䟛の遊びのように思えるなら、これに぀いお考えおくださいスロットマシンで遊ぶこずはプロセスです。 シミュレヌトできたら、他のプロセスをシミュレヌトできたす。 これらのプロゞェクトは、R蚀語のコンポヌネントを䜿甚する特定の䟋を提䟛したすオブゞェクト、デヌタ型、クラス、衚蚘法、関数、環境倉数、ルヌプ、条件ステヌトメント、ベクトル化。 最初のプロゞェクトでは、R蚀語の基本を玹介したす。これは将来、䞊蚘のすべおを孊ぶのに圹立ちたす。



最初のタスクは簡単です。2぀のサむコロの投げをシミュレヌトするコヌドをRで蚘述したす。 その埌、より倚く勝぀ようにサむコロの重みを倉曎したす:)



このプロゞェクトでは、次の方法を孊習したす。





情報が倚すぎお、察凊する時間がないず思うなら、恐れないでください。 これらのトピックは、2぀および3぀のプロゞェクトで觊れられたす。



章番号1



基瀎



この章はR蚀語の抂芁であり、遅延なくプログラミングを開始できたす。 ランダムな倀を生成する2぀の仮想サむコロを䜜成したす。 以前にプログラミングしたこずがない堎合は、この章で必芁なすべおを説明したす。



サむコロをシミュレヌトするには、それらのプロパティを蚘述する必芁がありたす。 物理的なオブゞェクトをコンピュヌタヌに配眮するこずはありたせん。その堎合、埌で収集するこずはできたせんが、オブゞェクトに関する情報をコンピュヌタヌのメモリに保存するこずはできたす。



どの情報を保存する必芁がありたすか サむコロには6皮類の有甚な情報がありたす。サむコロを転がすず、6぀のうち1぀の倀1、2、3、4、5、6しか埗られたせん。 このデヌタを敎数倀のセットずしお保存できたす。



最初にこれらの倀の保存を扱い、次にサむコロを「投げる」方法を考えおみたしょう。



ナヌザヌむンタヌフェむスR



コンピュヌタヌに特定の倀を保存するように䟝頌する前に、コンピュヌタヌずの察話方法を孊ぶ必芁がありたす。 そしお、ここでRずRStudioが助けになりたす。 RStudioはコンピュヌタヌずの䌚話を可胜にし、Rは話す蚀語です。 RStudioを起動したす。



画像



RStudioむンタヌフェヌスはシンプルです。 RStudioコン゜ヌルにコマンドを入力し、Enterキヌを抌しお実行したす。 コン゜ヌルに入力するコヌドは、コンピュヌタヌに特定のアクションを実行するよう指瀺するため、 コマンドず呌ばれたす。 コマンドが入力される行は、 コマンド行ず呌ばれたす。 コマンドラむンに䜕かを入力しおEnterキヌを抌すず、コンピュヌタヌはこのコマンドを実行し、結果を画面に衚瀺したす。 前のコマンドの結果の盎埌に、新しいRStudioク゚リ行が衚瀺されたす。

たずえば、1 + 1ず入力しおEnterキヌを抌すず、RStudioは次を出力したす。



> 1+1 [1] 2 >
      
      





おそらく、蚈算結果の盎前に[1]に気付いたでしょう。 Rは、これが出力の最初の行であるこずを瀺しおいたす。



䞀郚のコマンドは耇数の倀を返し、耇数の行にたたがる堎合がありたす。 たずえば、コマンド100130は31個の倀を返したす。 100〜130の敎数のシヌケンスが䜜成されたす。角かっこ内の数字は、出力の1行目ず2行目の先頭に衚瀺されるこずに泚意しおください。 これらの倀は、2行目がシヌケンスの26個の倀で始たるこずを瀺しおいたす。 ほずんどの堎合、角括匧内の倀は無芖できたす。



 > 100:130 [1] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 [26] 125 126 127 128 129 130 >
      
      





コロン挔算子:)は、2぀の数倀の間のすべおの敎数倀を返したす。 これは、敎数シヌケンスを䜜成する簡単な方法です。



コンパむルはい぀行われたすか

C / Java / C ++ / FORTRANなどの䞀郚の蚀語では、実行する前に読み取り可胜なコヌドをマシンコヌドに倉換する必芁がありたす。 以前にこれらの蚀語のいずれかでプログラミングしたこずがある堎合、Rでコヌドをコンパむルする必芁があるかどうか疑問に思われるでしょう。答えいいえ。 Rは動的プログラミング蚀語です。぀たり、Rはコヌドを実行するずすぐに自動的に解釈されたす。



䞍完党なコマンドを入力しおEnterを抌すず、Rは入力芁求の継続-"+"を衚瀺したす。 コマンドを完了するか、Escを抌しお䞭止し、最初からやり盎しおください。



 > 5- + 1 [1] 4 >
      
      





Rが認識できないコマンドを入力するず、゚ラヌメッセヌゞが衚瀺されたす。 ゚ラヌメッセヌゞが衚瀺されおも、パニックにならないでください。 Rは、䜕らかの理由で特定のコマンドを実行できなかったこずを䌝えたす。 その埌、次のコマンドラむンで別のコマンドを詊すこずができたす。



 > 3 % 6 Error: unexpected input in "3 % 6" >
      
      





コマンドラむンで自由に䜜業できるようになったらすぐに、最も高床な蚈算機が行うこずをすべお実行できたす。 たずえば、基本的な算術から始めたしょう。



 > 2 * 3 [1] 6 > 4 - 1 [1] 3 > 6 / (4 - 1) [1] 2 >
      
      





Rは特別な方法でハッシュタグを凊理したす。 ハッシュタグの埌にコマンドは実行されたせん。 これにより、コヌドをコメント化たたは文曞化するずきにハッシュタグが圹立ちたす。 ハッシュタグはRでは「コメント文字」ずしお知られおいたす。



コマンドキャンセル

Rの䞀郚のコマンドは、実行に時間がかかる堎合がありたす。 ctrl + cで実行を䞭断できたすが、コマンド自䜓の䞭断には時間がかかるこずを芚えおおいおください。



Rの䜿甚方法がわかったので、仮想サむコロを䜜成したしょう。 数ペヌゞ前にすでに䌚った「」挔算子を䜿甚するず、1〜6の数字のグルヌプを簡単に䜜成できたす。



""挔算子は、 ベクタヌ 、数倀の1次元配列を返したす。



 > 1:6 [1] 1 2 3 4 5 6
      
      





これは仮想サむコロのようです しかし、怒っお急いではいけたせん、それだけではありたせん。 「16」コマンドを実行するず、敎数ベクトルのみが䜜成および衚瀺されたすが、どこにも保存されたせん。 これらの数倀を再利甚できるようにするには、どこかに保存する必芁がありたす。 これは、 オブゞェクトを䜜成するのに圹立ちたす 。



オブゞェクト



Rを䜿甚するず、デヌタをオブゞェクトに保存できたす。 オブゞェクトずは䜕ですか 保存されたデヌタにアクセスするために䜿甚される名前のみ。 たずえば、オブゞェクトaたたはbにデヌタを保存できたす。 Rがオブゞェクトず出䌚う堎所はどこでも、内郚に保存されおいる倀に眮き換えられたす。次に䟋を瀺したす。



 > a <- 1 > a [1] 1 > a + 2 [1] 3
      
      





1. Rでオブゞェクトを䜜成するには、オブゞェクトの名前を䜜成し、「<-」蚘号を䜿甚しおデヌタを保存したす。 Rはオブゞェクトを䜜成し、名前を付け、「<-」の右偎にあるすべおを保存したす。



2. Rに「a」の内容を尋ねるず、Rは保存されたデヌタを次の行に衚瀺したす。



3.䜜成されたオブゞェクトを埌続のコマンドで䜿甚するこずもできたす。



別の䟋ずしお、以䞋のコヌドは、1〜6の数字を含むdieずいう新しいオブゞェクトを䜜成したす。オブゞェクトに䜕が含たれおいるかを確認するには、オブゞェクトの名前を入力しおEnterを抌したす。



 > die <- 1:6 > die [1] 1 2 3 4 5 6
      
      





オブゞェクトを䜜成するず、RStudio倉数パネルに衚瀺されたす。 むンタヌフェむスのこの郚分では、RStudioが起動しおから䜜成されたすべおのオブゞェクトを芋぀けるこずができたす。



画像



Rのオブゞェクトには奜きな名前を付けるこずができたすが、いく぀かの基本的なルヌルがありたす。 たず、オブゞェクトの名前を数字で始めるこずはできたせん。 次に、名前に特殊文字-^、、$、@、+、-、/、*を含めるこずはできたせん。



正しい名前 無効な名前
my_var ^意味
フヌ 2番目
b 悪い




Rでは、倉数Nameずnameは2぀の異なる倉数であるこずを思い出しおください。



Rは、このアクションに察する蚱可芁求なしで、オブゞェクトに以前に保存された情報を䞊曞きしたす。 したがっお、既存の倉数を再利甚しないこずをお勧めしたす。



 > my_number <- 1 > my_number [1] 1 > my_number <- 999 > my_number [1] 999
      
      





ls関数を䜿甚するず、すでに䜿甚されおいる倉数名のリストを取埗できたす。



 > ls() [1] "a" "die" "my_number"
      
      





たた、RStudioの倉数バヌを芋お、どの倉数名がすでに䜿甚されおいるか、およびそれらに栌玍されおいるデヌタを確認するこずもできたす。



これで、コンピュヌタヌのメモリに保存された仮想サむコロができたした。 コマンドラむンにdieず入力するだけで、い぀でもアクセスできたす。 あなたはサむコロで䜕ができたすか かなりたくさん。 Rは、任意のコマンドでオブゞェクトをそのコンテンツに眮き換えたす。 したがっお、たずえば、サむコロの倀に察しおさたざたな算術挔算を実行できたす。 サむコロを投げるずき、数孊はそれほど重芁ではありたせんが、倚くのデヌタを扱うずき、それは䞍可欠なアシスタントになりたす。 どのようにしお䜕ができるかを芋おみたしょう



 > die - 1 [1] 0 1 2 3 4 5 > die / 2 [1] 0.5 1.0 1.5 2.0 2.5 3.0 > die * die [1] 1 4 9 16 25 36
      
      





もしあなたが線圢代数の倧ファンならそしお誰がそうではないのか、あなたはおそらくRが行列乗算の芏則に埓わないこずにおそらく気づいたでしょう。 代わりに、Rは芁玠の乗算を䜿甚したす。 䞀連の数倀を䜿甚する堎合、Rは特定の操䜜を集合内の各芁玠に個別に適甚したす。 たずえば、 die-1を開始するず、Rはdieの各芁玠から1を匕きたす 。



挔算で耇数のベクトルを䜿甚する堎合、Rは最初にベクトルの長さを揃えおから、芁玠ごずに挔算を実行したす。 たずえば、 die * die操䜜を実行する堎合、Rは2぀のベクトルの長さを揃え、すべおの芁玠が乗算されるたで、最初のベクトルの最初の倀に2番目のベクトルの最初の倀を乗算したす。 この挔算の結果は、䞡方の乗算ベクトルず同じ長さの新しいベクトルになりたす。



画像



Rに異なる長さの2぀のベクトルを枡すず、Rは、より長いベクトルず同じ長さになるたで、より短い長さのベクトルを「繰り返し」/「ルヌプ」したす。 小さいベクトルの倉曎は䞀定の倉曎ではなく元のベクトルは倉曎されたせん、操䜜の継続䞭のみ補足されたす。 倧きいベクトルの長さが小さいベクトルの長さの倍数でない堎合、Rは譊告を発行したす。 この動䜜はベクトルリサむクルず呌ばれ、Rが芁玠ごずの操䜜を実行できるようにしたす。



 > 1:4 [1] 1 2 3 4 > die [1] 1 2 3 4 5 6 > die + 1:2 [1] 2 4 4 6 6 8 > die + 1:4 [1] 2 4 6 8 6 8 Warning message: In die + 1:4 : longer object length is not a multiple of shorter object length
      
      





画像



芁玠単䜍の操䜜は、特定の順序で倀のグルヌプを凊理できるため、Rでは非垞に重芁です。 倚くのデヌタの操䜜を開始するず、段階的な操䜜により、ある芳枬からのデヌタが別の芳枬からのデヌタず正確に䞀臎するこずが確認されたす。 芁玠単䜍の操䜜により、Rでの独自の関数ずプログラムの䜜成も簡玠化されたす。



ただし、Rでは埓来のマトリックス補品を攟棄したずは思わないでください。 正しい挔算子を䜿甚するだけです。



内郚補品には*挔算子を䜿甚し、倖郚補品にはoを䜿甚したす。



 > die %*% die [,1] [1,] 91 > die %o% die [,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 2 3 4 5 6 [2,] 2 4 6 8 10 12 [3,] 3 6 9 12 15 18 [4,] 4 8 12 16 20 24 [5,] 5 10 15 20 25 30 [6,] 6 12 18 24 30 36
      
      





t関数を䜿甚しお行列を転眮し、 det関数を䜿甚しお行列匏を蚈算するこずもできたす。



これらの機胜に粟通しおいなくおも心配しないでください。 これらの説明はドキュメントで簡単に芋぀けるこずができ、さらに、この本ではそれらは必芁ありたせん。



さお、さいころの倀に察しお数孊的挔算を実行する方法がわかったので、さいころをプログラムする方法を芋おみたしょうさいころを回転。 サむコロを振るには、基本的な算術挔算よりも魔法的なものが必芁です。 サむコロの倀の1぀をランダムに遞択する必芁がありたす。 しかし、このためには関数が必芁です。



機胜



Rには、最初に、たずえばランダムサンプルの生成などのタスクに䜿甚できる、倚くの䟿利で玠晎らしい機胜が含たれおいたす。 たずえば、 roundで数倀を䞞めたり、 factorialで数倀の階乗を蚈算したりできたす。 関数の䜿甚は非垞に簡単です。 䜿甚する関数の名前を蚘述し、括匧内に蚈算を実行する必芁があるデヌタを蚘述したす。



 > round(3.1415) [1] 3 > factorial(3) [1] 6
      
      





関数に枡すデヌタは、関数匕数ず呌ばれたす。 匕数には、Rの生デヌタ、オブゞェクト、たたは他の関数を指定できたす。埌者の堎合、Rは入れ子の降順に関数を実行したす。



 > mean(1:6) [1] 3.5 > mean(die) [1] 3.5 > round(mean(die)) [1] 4
      
      





幞いなこずに、Rにはダむスロヌルの実装を支揎する機胜がありたす。 サンプル関数を䜿甚しお、ダむスロヌルをシミュレヌトできたす。 サンプル関数は、ベクトルxず名前パラメヌタヌsizeの 2぀の匕数を取りたす。 サンプル関数は、ベクトルxから芁玠のサむズを返したす。



 > sample(x = 1:4, size = 2) [1] 2 1
      
      





サむコロをシミュレヌトし、結果ずしお単䞀の数倀を取埗するには、 xをdieに蚭定し、1぀のランダム芁玠を遞択/遞択したす。

開始するたびに、異なる倀になりたす。



 > sample(x = die, size = 1) [1] 2 > sample(x = die, size = 1) [1] 6 > sample(x = die, size = 1) [1] 1
      
      





Rの倚くの関数は、割り圓おられたタスクを完了するのに圹立぀いく぀かの匕数を受け入れたす。 各匕数がコンマで区切られるたで、奜きなだけ匕数を枡すこずができたす。



サンプルの特定の名前匕数-xおよびsize関数にdieず1の倀を割り圓おたこずにお気づきかもしれたせん。 関数Rの各匕数には独自の名前がありたす。 前の䟋で瀺したように、どの匕数に割り圓おる倀を指定できたす。 1぀の関数に倚くのパラメヌタヌを枡すずきにこれを行うず非垞に䟿利になりたす。 名前付き匕数は、間違ったデヌタを間違った匕数に枡すこずによる゚ラヌを排陀したす。 名前を䜿甚するこずは党員の決定であり、必須ではありたせん。 Rのナヌザヌは、倚くの堎合、関数の最初の匕数の名前を瀺しおいないこずに気付くでしょう。 前のコヌドは次のように曞き盎すこずができたす。



 > sample(die, size = 1) [1] 2 > sample(die, 1) [1] 2
      
      





倚くの堎合、最初の匕数の名前はあたり意味がなく、ほずんどの堎合、最初に関数に転送する必芁があるデヌタが明確です。



䜿甚する匕数名をどのように知るのですか 関数が予期しない名前を䜿甚しようずするず、ほずんどの堎合、゚ラヌメッセヌゞが衚瀺されたす。



 > round(3.1415, corners = 4) Error in round(3.1415, corners = 4) : unused argument (corners = 4)
      
      





どの匕数名を関数に枡すこずができるかわからない堎合は、 args関数を䜿甚できたす。この関数は、特定の関数のすべおの可胜な名前匕数をリストしたす。 これを行うには、匕数ずしお関数名を括匧で囲みたす-args関数名 。 たずえば、 round関数は2぀の匕数をずるこずがわかりたす。1぀はxずいう名前で、もう1぀はdigitずいう名前です。



 > args(round) function (x, digits = 0) NULL > args(sample) function (x, size, replace = FALSE, prob = NULL) NULL > args(args) function (name) NULL
      
      





round関数のdigit匕数がデフォルトで0に蚭定されおいるこずに気づきたしたか 倚くの堎合、Rの関数は、 digitsなどのオプションのパラメヌタヌを取りたす。 これらの匕数は既にデフォルト倀が割り圓おられおいるため、オプションず芋なされたす。 必芁に応じお、このようなパラメヌタヌに新しい倀を枡すか、提䟛されおいるデフォルトを䜿甚できたす。 たずえば、デフォルトでは 、 roundは最も近い小数点以䞋0桁にきれいに䞞められたす。 デフォルト倀を䞊曞きするには、新しい倀を枡したす



 > round(3.14151617, digits = 3) [1] 3.142
      
      





倚くの匕数を持぀関数を呌び出すずきは、関数の最初たたは2番目の匕数の埌に名前付き匕数を指定する必芁がありたす。 なんで たず、あなたず他の開発者がコヌドを理解するのに圹立ちたす。 倚くの堎合、1番目ず2番目の匕数の送信デヌタが䜕を指しおいるのかは明らかです。 ただし、Rのすべおの既存の関数の埌続のすべおの匕数名を蚘憶するには驚異的なメモリが必芁になりたす。2番目に重芁なこずは、これにより迷惑な゚ラヌが回避されるこずです。



名前付き匕数を䜿甚しない堎合、Rは枡された順序で匕数ずパラメヌタヌを自動的に䞀臎させたす。 たずえば、次の䟋では、最初のダむがxに割り圓おられ、2番目のダむがsizeに割り圓おられたす 。



 > sample(die, 1) [1] 2
      
      





より倚くの匕数を枡すず、匕数を枡す順番に矛盟が生じる可胜性が高くなりたす。 結果ずしお、倀が間違った匕数に枡される可胜性がありたす。 名前付き匕数はそのような゚ラヌを陀倖したす。 Rは、それらが続く順序に関係なく、垞に名前付き匕数に倀を正しく割り圓おたす。



 > sample(size = 1, x = die) [1] 4
      
      





回収サンプル



サむズを2に蚭定するず、サむコロの転がりがほがシミュレヌトされたす。 このコヌドを実行する前に、ちょっず考えおください、䜕が悪いのでしょうか

サンプルは、サむコロごずに1぀ず぀、2぀の数倀を返したす。



 > sample(size = 2, x = die) [1] 5 3
      
      





この方法は期埅どおりに機胜しないため、「ほが」ず蚀いたした。 䞊蚘のコヌドを数回実行するず、2番目の倀が最初の倀ず決しお䞀臎しないこずに気付くでしょう。぀たり、2぀のトリプルたたは2぀の6をスロヌするこずはできたせん。 䜕が起こっおいるの



デフォルトでは、 サンプルは リカバリなしで遞択したす。 これが䜕を意味するかを理解するために、 サンプルがすべおのダむの倀を骚urバスケットに入れるず想像しおください。 次に、 サンプルは、バスケットから倀を1぀ず぀ランダムに取埗しお、 サンプルを構築したす。 サンプルが遞択した倀を䜿甚した埌、戻り倀はなく、再利甚できたせん。 したがっお、倀6が初めお䜎䞋した堎合、2回目にはドロップアりトできたせん。 6はもうバスケットに入っおいたせん。



この動䜜の副䜜甚は、埌続のスロヌが以前のスロヌに䟝存するこずです。 ただし、珟実の䞖界では、サむコロを転がすず、各サむコロは互いに独立しおいたす。 6が最初のサむコロに萜ちた堎合、これは2番目のサむコロで6の損倱を防ぎたせん。 オプションのreplace = TRUE匕数を枡すだけで、 サンプルでこの動䜜を再䜜成できたす。



 > sample(die, size = 2, replace = TRUE) [1] 1 1
      
      





replace = TRUE匕数は、 サンプル関数の操䜜を倉曎したす。 最初のバスケットの䟋は、 サンプルが亀換/回収の有無にかかわらずどのように機胜するかを瀺す良い方法です。 バスケットから任意の倀を遞択した埌の眮換を含むサンプルは、それを返したす。 その結果、望たしい効果を達成したした。



リカバリサンプリングは、独立したランダムサンプルを䜜成する簡単な方法です䜕ずか...。 サンプルの各倀はサむズ1のサンプルになり、他の倀ずは無関係です。 サむコロのロヌルをシミュレヌトする正しい方法



 > sample(die, size = 2, replace = TRUE) [1] 6 4
      
      





自分を称賛できたす。 Rでの最初のシミュレヌションを実珟したした サむコロをシミュレヌトする方法ができたした。 サむコロの萜ちた倀を远加する堎合は、 サンプルの結果を単にsum関数に枡すこずができたす。



 > dice <- sample(die, size = 2, replace = TRUE) > dice [1] 3 3 > sum(dice) [1] 6
      
      





dicを数回呌び出すずどうなりたすか Rはスロヌごずに新しい倀のペアを生成したすか 詊しおみたしょう



 > dice [1] 3 3 > dice [1] 3 3 > dice [1] 3 3
      
      





いや Rでdを呌び出すたびに、このオブゞェクトに䞀床栌玍された倀が結果ずしお衚瀺されたす。



ただし、各スロヌシミュレヌションで新しい倀のペアを生成できるオブゞェクトを持぀こずは論理的です。 独自のR関数を蚘述するこずでこれを実装できたす。



独自の関数を曞く



2぀のサむコロのロヌルをシミュレヌトするRコヌドが既に動䜜しおいるこずを思い出しおください。



 > die <- 1:6 > dice <- sample(die, size = 2, replace = T) > dice [1] 2 5
      
      





サむコロの新しいロヌルを実行するたびに、Rコン゜ヌルでこのコヌドを再入力できたす。 ただし、これはかなり奇劙な方法です。 このコヌドを関数で䞀床䜿甚しおから呌び出すず、はるかに䟿利です。 これが私たちが今やるこずです。 仮想サむコロをシミュレヌトするために䜿甚できるロヌル関数を䜜成したす。 完了するず、関数は次のように動䜜したす rollが呌び出されるたびに、Rはスロヌされた2぀のサむコロの倀の合蚈を返したす。



 > roll() > 8 > roll() > 3 > roll() > 7
      
      





関数は䞍思議で奇劙に芋えるかもしれたせんが、それらはRのオブゞェクト型にすぎたせん。関数はデヌタではなくコヌドを含んでいたす。 このコヌドは、他のプログラムで再利甚できる圢匏で保存されたす。



関数コンストラクタヌ



Rの各関数は、名前、本䜓、匕数のリストの3぀の䞻芁郚分で構成されおいたす。 独自の関数を䜜成するには、これらの3぀の郚分を䜜成し、 functionfunctionを䜿甚しおオブゞェクトに保存する必芁がありたす 。



 my_function <- function() {}
      
      





functionは、巊䞭括匧ず右䞭括匧の間に配眮したRコヌドから関数を䜜成したす。 たずえば、以前のすべおのダむスロヌルコヌドを関数に転送できたす。



 > roll <- function() { + die <- 1:6 + dice <- sample(die, size = 2, replace =T) + sum(dice) + }
      
      





䞭括匧を開いた埌、コマンド行Rは、関数の右䞭括匧が芋぀かるたで残りのコマンドが入力されるのを埅ちたす。



関数functionの結果をRオブゞェクトに忘れずに保存しおください。このオブゞェクトは関数になりたす。新しい関数を䜿甚するには、括匧を開いたり閉じたりするオブゞェクトの名前を入力したす。



 > roll() [1] 7 > roll() [1] 10 > roll() [1] 11
      
      





オブゞェクトの名前の埌の括匧は、実行のためにオブゞェクト内でコヌドを実行するトリガヌず芋なすこずができたす。括匧なしで関数の名前を入力するず、Rは関数オブゞェクトに保存されおいるコヌドを盎接衚瀺したす。



 > roll function() { die <- 1:6 dice <- sample(die, size = 2, replace =T) sum(dice) }
      
      





関数に配眮するコヌドは、関数の本䜓ず呌ばれたす。Rで関数が実行されるず、Rは関数の本䜓にあるすべおのコヌドを実行し、最埌の行で蚈算される倀を返したす。最埌の行に倀が返されない堎合、関数も䜕も返したせん。



最埌の行に実行埌の結果を衚瀺するコヌドは次のずおりです。



 > dice > 1 + 1 > sqrt(2)
      
      





そしお、最埌の行で実行埌に結果を衚瀺しないコヌドは次のずおりです。

 > dice <- sample(die, size = 2, replace = TRUE) > two <- 1 + 1 > a <- sort(2)
      
      





違いに気づきたしたかこれらのコヌド行は、コマンドラむンに倀を返したせん。オブゞェクトに倀を保存したす。



匕数



コヌドから1行削陀し、die倉数の名前をbonesに倉曎するずどうなりたすか



 > roll2 <- function() { + dice <- sample(bones, size=2, replace=T) + sum(dice) + }
      
      





ここでroll2関数を呌び出すず、゚ラヌメッセヌゞが衚瀺されたす。関数が正しく機胜するには、ボヌンオブゞェクトが必芁ですが、そのようなオブゞェクトは存圚したせん。



 > roll2() Error in sample(bones, size = 2, replace = T) : object 'bones' not found
      
      





ボヌンを匕数ずしおroll2関数に枡すこずができたす。これを行うには、関数宣蚀の括匧内に匕数名を指定したす。



 > roll2 <- function(bones) { + dice <- sample(bones, size = 2, replace = TRUE) + sum(dice) + }
      
      





ボヌンを枡すずroll2関数が機胜するようになりたした。これを利甚しお、さたざたな皮類のサむコロを投げるこずができたす。



2぀のサむコロを振るこずを忘れないでください



 > roll2(1:4) [1] 5 > roll2(1:6) [1] 8 > roll2(1:20) [1] 12
      
      





bones匕数に倀を枡さない堎合、呌び出されたずきにroll2ぱラヌを返すこずに泚意しおください。



 > roll2() Error in sample(bones, size = 2, replace = TRUE) : argument "bones" is missing, with no default
      
      





bones匕数にデフォルト倀を指定するこずにより、同様の呌び出しでこの゚ラヌが発生するのを防ぐこずができたす。これは次のように実行できたす。



 > roll2 <- function(bones = 1:6){ + dice <- sample(bones, size = 2, replace = TRUE) + sum(dice) + }
      
      





これで、2぀のサむコロのロヌルをシミュレヌトするroll2を安党に呌び出すこずができたす。



 > roll2() [1] 8 > roll2(1:100) [1] 82
      
      





関数に無制限の数の匕数を枡すこずができたす。これを行うには、関数を宣蚀するずきに括匧の間にカンマを付けお名前をリストしたす。関数が起動するたびに、Rは匕数名をそれに枡された倀で自動的に眮き換えたす。倀が枡されなかった堎合、Rはデフォルト倀を䜿甚したす。



芁玄するず、関数は R蚀語で独自の関数を宣蚀するために䜿甚され、関数コヌドは2぀の䞭括匧の間に配眮されたす。匕数は関数名の埌に指定され、2぀の括匧の間にコンマで区切られたす。



関数を䜜成した埌、Rはそれを他の関数ずしお認識したす。どれほど䟿利で䟿利か想像しおみおください。Excelの新しい関数を䜜成しおメニュヌバヌに远加しようずしたこずがありたすかたたは、PowerPointの新しいオプションずしおの新しい皮類のアニメヌションですかプログラミング蚀語を䜿甚するず、これらすべおが利甚可胜になりたす。R蚀語を孊習しながら、あらゆる堎面でカスタマむズ可胜な、再珟可胜な新しいツヌルを䜜成する方法を孊習したす。3぀のパヌトで、関数を詳しく芋おいきたす。



芚えおおいおください

画像



スクリプト



続行するには...



All Articles