コンソールでのコード実行
Rで単発のコードを実行するには,Consoleタブでコードを入力してEnterで実行する。Consoleには>
というプロンプトが表示されるので,そこにコードを入力してEnterを押せば実行できる。基本的には,計算式や関数を入力して実行すれば,その結果が返される。
たとえば,単純な計算をやってみよう。Consoleに4 + 5
と入力してEnterを押す。
計算結果[1] 9
が返され,再びプロンプト>
が表示される。結果の[1]
の部分は,Rが返す計算結果の1つ目の要素であることを表している。ここでは,計算結果は1つだけであるが,ベクトルの計算などでは複数の値が返ってくる。結果が一行におさまらない場合には,行の先頭の結果が何番目の要素であるかが表示される。
たとえば,1から100までの数字を返す1:100
を実行してみよう。
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
[55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
[91] 91 92 93 94 95 96 97 98 99 100
ウィンドウのサイズによるが,この例では1行あたり18個の要素が表示されている。2行目の先頭は19番目の要素なので,[19]
と表示されている。同様に3行目の先頭は37番目の要素なので,[37]
と表示されている。
今後,Rのコードと実行結果は,このような囲みの中に表記する。
Rにおけるオブジェクト
数値と文字列
Rでは,さまざまな情報を記憶するための「箱」のことをオブジェクトという。Rのオブジェクトには,数値や文字列などが格納されるベクトルや行列,データフレームなど,さまざまな構造がある。
オブジェクトの名前は比較的自由につけることができる。日本語 (漢字)を使うこともできるが,原則として英数字とアンダースコア_
だけにしよう。また,Rのオブジェクトの名前は大文字と小文字とを区別する。
たとえば,a
という変数に2という数値,b
という変数に2.5という数値を記憶させてみよう。
このような操作を代入という。代入が正しく行われたかどうかを確認してみよう。
a
,b
の変数にそれぞれ2,2.5という数値が代入されていて,a
,b
を用いた計算もできることがわかる。
また,RStudioの”Environment”タブにオブジェクト名a
,b
と,代入された値が表示されていることもあわせて確認しよう。
変数には,数値だけではなく,文字列を代入することもできる。文字列は,ダブルクオーテーション" "
,もしくはシングルクオーテーション' '
で囲う。
name <- '大阪 太郎'
gender <- "男"
age <- "20" # ""で囲っているので文字列として扱われる
name
という変数には”大阪 太郎”という文字列,gender
という変数には”男”という文字列,age
という変数には”20”という文字列が代入されていることがわかる。
ここで,age
に代入されている”20”は,20という数値ではなく,文字列として扱われていることに注意しよう。そのため,age
を数値として計算に用いることはできず,下のようなエラーとなる。
Error in age + 10: non-numeric argument to binary operator
変数には内容によっていくつかの型 (type)がある。ここでは,a
,b
は数値型(numeric),name
,gender
,age
は文字列型(character)となる。
EnvironmentタブをList表示からGrid表示に切り替えれば,オブジェクトの型を確認することができる。
文字列型の変数を数値型に変換したい場合には,as.numeric()
関数を用いる。
この例ではage
は文字列型だが,as.numeric(age)
でage
を数値型に変換している。数値型に変換されているので,計算を行うことができる。
逆に数値型の変数を文字列型に変換するには,as.character()
関数を用いる。
ベクトル
1つのオブジェクトに,複数の数値や文字列を代入することもできる。複数の数値や文字列が格納されたオブジェクトをベクトルという。Rではデータ構造の最小単位はベクトルである。上で用いた「変数」も長さ (要素の数)が1のベクトルであるが,わかりやすく「変数」と呼ぶことにする。
たとえば,name
というベクトルに3人の名前を代入し,age
というベクトルに3人の年齢を代入してみよう。ベクトルは,c(要素1,要素2,...)
で表す。
name <- c("大阪 太郎", "兵庫 次郎", "京都 花子")
age <- c(19, 21, 20)
name
とage
の内容を確認してみよう。
[1] "大阪 太郎" "兵庫 次郎" "京都 花子"
name
とage
の内容が先ほどのものと置き換わっていることがわかる。Rでは既存のオブジェクトに改めて別の内容を代入すると,中身が置き換えられる。
Environmentタブで確認すると,name
とage
のLengthが1から3へと変わっていることがわかる。Lengthはベクトルの長さを表す。
ベクトルから1つの要素を取り出すには,ベクトル名のあとに[要素番号]
をつける。ただし,ベクトルの要素番号は1から始まることに注意しよう(言語によっては0から始まるものもあるので混乱しないよう)。たとえば,name
というベクトルの2番目の要素を取り出すのであれば,次のように書く。
スクリプトファイル
実際にはコンソールに単発のコードを入力して実行するよりも,スクリプトファイルにコードを書いてそれを実行することの方が多い。新しいスクリプトファイルは,RStudioのメニューから[File] > [New File] > [R Script]を選択すれば作成できる。
スクリプトファイルでは,[Ctrl] + [Enter]を押すと,カーソルのある行のコードが実行され,カーソルが次の行に移動する。これによって1行ずつ実行結果を確認しながら実行していくことができる。
範囲を指定して[Ctrl] + [Enter]を押すと,選択された範囲のコードが順に実行される。また,[Ctrl] + [Shift] + [Enter]を押すと,コードが最初からすべて実行される。
Consoleで単発のコードを実行した場合にも,Histroyタブからスクリプト・ファイルへ実行したコマンドを貼り付けていくと良い。そうすれば,いつでも作業を最初から再現できる。研究では,結果を再現できることが極めて重要。
スクリプトファイルを書く際には,以下のようなルールに則って書くようにしよう (あくまでコードの視認性のためのルールであり,コードが動かないわけではない)。詳細なルールは,Tidyverse Style Guideを参照。
ただし,最初からすべて覚えようとすると大変なので,他の人が書いたコードを見たり,自分で視認性を意識しながらコードを書いたりして,少しずつ慣れていけば良い。
また,RStudioをはじめとするコードエディタには,上記のようなルールを適用して,コードを自動でフォーマットする機能がある。
コメント
スクリプトファイルのなかで#
を書くと,その位置から行の終わりまでがコメントとして扱われる。したがって,行の先頭に#
を書けば,その行はすべてコメントとして扱われる。コメントはコードを実行する際には無視されるので,コードの説明やメモなどを自由に書き込んでおくと良い。
カンマ,演算子の前後にはスペースを入れる
スクリプトファイルを書くときには,,
や+
, -
などの演算子の前後にはスペースを入れるのがルール (コードを見やすくするためのルールであり,スペースを入れなくてもコードは動く)。たとえば,a<-1+2
と書くのではなく,a <- 1 + 2
と書く。
改行とインデント
コードは1行が長くなると視認性が悪くなる。Rのコードは,(
や,
,+
, -
などの演算子のあとに改行を入れることができる。
たとえば,上のようなコードは,1行が長い。そこで,(
と),
のあとに改行を入れると,コードが見やすくなる。
また,Rのコードは自由にインデント (字下げ) することができる。インデントには,通常半角スペース2つ分を用いる。
インデントには一般的なルールがあるが,インデントによってコードがエラーになることはないので,はじめのうちはそこまで気にする必要はない。基本的には,長い行を改行によって分割するときには2行目以降をインデントする。