Menu
Coddy logo textTech

デフォルト引数

CoddyのRジャーニー「基礎」セクションの一部 — レッスン 51/78。

時には、必要に応じてカスタマイズ可能な「標準的な」動作を関数に持たせたい場合があります。デフォルト引数(Default parameter values)を使用すると、呼び出し側が値を指定しなかった場合に、パラメータがどのような値になるかを定義できます。

デフォルト値は、関数定義の中で = を使用して設定します:

greet <- function(name = "Guest") {
  print(paste("Hello,", name))
}

greet()
greet("Alice")

出力:

[1] "Hello, Guest"
[1] "Hello, Alice"

引数なしで呼び出された場合、関数は "Guest" をデフォルトとして使用します。値を指定すると、デフォルト値が上書きされます。

必須パラメータとオプションパラメータを混在させることができます。デフォルト値を持つパラメータは、デフォルト値を持たないパラメータの後に配置する必要があります:

calculate_total <- function(price, tax_rate = 0.1) {
  return(price + (price * tax_rate))
}

print(calculate_total(100))
print(calculate_total(100, 0.2))

出力:

[1] 110
[1] 120

ここでは、priceは必須ですが、tax_rateのデフォルト値は10%です。これにより、関数に柔軟性が生まれます。一般的なケースでは簡単に使用でき、必要に応じてカスタマイズ可能です。

challenge icon

チャレンジ

簡単

2つの引数を取るcalculate_shippingという名前の関数を作成してください:

  • weight - パッケージの重量(必須)
  • rate - 重量単位あたりのコスト(任意、デフォルトは5

この関数は、weight * rateとして計算される送料を返す必要があります。

2行の入力を受け取ります:

  1. 重量の値
  2. レートの値、またはdefaultという単語

2番目の入力がdefaultの場合は、重量のみを指定して(デフォルトのレートを使用して)関数を呼び出します。それ以外の場合は、重量と提供されたレートの両方を指定して関数を呼び出します。

返された結果を出力してください。

例えば、入力が以下の場合:

10
default

出力は以下のようになります:

[1] 50

入力が以下の場合:

10
3

出力は以下のようになります:

[1] 30

チートシート

関数の定義で = を使用して、デフォルトの引数値を設定できます:

greet <- function(name = "Guest") {
  print(paste("Hello,", name))
}

greet()           # デフォルトを使用: "Hello, Guest"
greet("Alice")    # デフォルトを上書き: "Hello, Alice"

必須の引数とオプションの引数を混在させる場合は、デフォルト値を持つ引数を、持たない引数の後に配置します:

calculate_total <- function(price, tax_rate = 0.1) {
  return(price + (price * tax_rate))
}

calculate_total(100)       # デフォルトの tax_rate を使用: 110
calculate_total(100, 0.2)  # カスタムの tax_rate: 120

自分で試してみよう

# 入力を読み込む
con <- file("stdin", "r")
weight <- as.numeric(suppressWarnings(readLines(con, n = 1)))
rate_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# TODO: 以下にコードを記述してください
# 1. weight(必須)とrate(任意、デフォルト = 5)を持つcalculate_shipping関数を定義する
# 2. rate_inputが "default" か数値かを確認する
# 3. 関数を適切に呼び出し、結果を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン