Rは動的型付け言語なので、一般的に、変数の型を指定する必要はありません。代入演算子としては<-が好まれます。
x <- 42
avogadro <- 6.02e23
mystr <- "Hello, World!"
<-の代わりに=を使っても、多くの場合は動きますが、必ず動くとは限りません。また、良いスタイルではないとされているので避けましょう。
RStudioで作業している場合は、キーボードショートカットのAlt-minusで入力できます。
演算子はほとんど一般的なものですが、%/%と%%には注意してください。
2 + 3 # 5
2 - 3 # -1
2 * 3 # 6
2 / 3 # 0.6666667
8 %/% 3 # 2 (integer division)
8 %% 3 # 2 (remainder)
2 ^ 3 # 8 (exponential)
Rでは、#から始まる1行コメントを書けます。
複数行コメントのための専用の構文はありません。
関数を定義するには、次のように書きます。
squareit <- function(x) {
x * x
}
関数は0個以上の入力を取ることができ、それらはカンマで区切ります。
function()と書くときは、入力がなくても括弧(())が必要です。
関数の入力にはデフォルト値を指定できますが、デフォルト値のない入力よりも後に置く必要があり、デフォルト値の代入には<-ではなく=を使います。
あまり意味のない例ですが、次のようになります。
squareit <- function(x = 42) {
x * x
}
squareit()
#> [1] 1764
波括弧({ })は、1行の関数本体には厳密には必要ありませんが、付けておくのが良いスタイルとされています。
上の例のように、Rは関数の最後の値を自動的に戻り値として返します。
return()は、関数本体のどこでも使うことができ、戻り値を明示できます。
関数の呼び出しは、他の多くの言語と同じです。
squareit(3)
#> [1] 9
この演習では、お気に入りの料理本から最高のラザニアを作るために、コードを書いていきます。
ラザニアの調理にかかる時間に関する4つのタスクがあります。
引数を取らず、ラザニアをオーブンに入れておくべき時間を分単位で返すexpected_minutes_in_oven()関数を定義します。料理本によると、オーブンでの想定時間は60分です。
> expected_minutes_in_oven()
[1] 60
ラザニアをオーブンに入れてから実際に経過した分数を入力として受け取り、前のタスクで求めたオーブンでの想定時間をもとに、ラザニアをあと何分オーブンに入れておく必要があるかを返すremaining_time_in_minutes関数を定義します。
> remaining_time_in_minutes(50)
[1] 10
ラザニアに重ねた層の数を入力として受け取り、1層あたり2分かかると仮定して、ラザニアの下準備にかかった時間を分単位で返すprep_time_in_minutes()関数を定義します。
> prep_time_in_minutes(2)
[1] 4
2つの入力を受け取るelapsed_time_in_minutes関数を定義します。1つ目の入力はラザニアに重ねた層の数、2つ目の入力はラザニアをオーブンに入れてからの経過時間(分)です。この関数は、ラザニアの調理に合計で何分かかったかを返します。これは、下準備にかかった時間と、現時点でラザニアがオーブンに入っていた時間を足したものです。
> elapsed_time_in_minutes(3, 20)
[1] 26