トラック
/
R
R
/
演習
/
ラザニア
ラザニア

ラザニア

学習演習

はじめに

変数と代入

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つのタスクがあります。

1. オーブンでの想定時間を分単位で定義する

引数を取らず、ラザニアをオーブンに入れておくべき時間を分単位で返すexpected_minutes_in_oven()関数を定義します。料理本によると、オーブンでの想定時間は60分です。

> expected_minutes_in_oven()
[1] 60

2. 残りのオーブン時間を分単位で計算する

ラザニアをオーブンに入れてから実際に経過した分数を入力として受け取り、前のタスクで求めたオーブンでの想定時間をもとに、ラザニアをあと何分オーブンに入れておく必要があるかを返すremaining_time_in_minutes関数を定義します。

> remaining_time_in_minutes(50)
[1] 10

3. 下準備にかかる時間を分単位で計算する

ラザニアに重ねた層の数を入力として受け取り、1層あたり2分かかると仮定して、ラザニアの下準備にかかった時間を分単位で返すprep_time_in_minutes()関数を定義します。

> prep_time_in_minutes(2)
[1] 4

4. 経過時間を分単位で計算する

2つの入力を受け取るelapsed_time_in_minutes関数を定義します。1つ目の入力はラザニアに重ねた層の数、2つ目の入力はラザニアをオーブンに入れてからの経過時間(分)です。この関数は、ラザニアの調理に合計で何分かかったかを返します。これは、下準備にかかった時間と、現時点でラザニアがオーブンに入っていた時間を足したものです。

> elapsed_time_in_minutes(3, 20)
[1] 26
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
R Exercism

ラザニアを始める準備はできましたか?

Exercismに登録すれば、21個のコンセプト111個の演習、そして本物の人間によるメンタリングとともに、Rを学んでマスターできます。すべて無料です。