メインコンテンツにスキップ
モジュール 3 · レッスン 1 / 2コース内の 5/10~12 min
モジュールのレッスン (1/2)

関数の書き込み

R では、関数は第一級市民 (それ自体がオブジェクト) であり、コードをモジュール式で再利用可能な、よく整理されたブロックに構造化できます。

関数の定義

関数を定義するには、function キーワードを使用し、代入演算子 <- を使用して、作成したオブジェクトを変数 (関数名) に割り当てます。

R
# Simple function definition
greet_user <- function() {
  print("Hello, User!")
}

# Invoking the function
greet_user()

パラメータと戻り値

関数は 1 つ以上のパラメータを受け入れることができます。明示的に値を返すには、return() 関数を使用します。 return() が省略された場合、R は関数本体で最後に評価された式の値を自動的に返します。

R
# Function that adds two numbers and returns the result
add_numbers <- function(a, b) {
  sum_result <- a + b
  return(sum_result)
}

total <- add_numbers(5, 7)
print(total) # Prints 12

デフォルトの引数

関数のパラメータのデフォルト値を指定できます。関数の呼び出し時に引数が指定されていない場合、R はデフォルト値を使用します。

R
# The function uses a default discount rate of 10% (0.10)
apply_discount <- function(price, discount = 0.10) {
  discounted_price <- price * (1 - discount)
  return(discounted_price)
}

# Uses the default (10%)
print(apply_discount(100)) # Prints 90

# Specifies a custom discount (20%)
print(apply_discount(100, 0.20)) # Prints 80

リストを使用して複数の値を返す

R の関数は return() を介して単一のオブジェクトを直接返すことしかできないため、複数の値 (おそらく異なる型または長さ) を返す必要がある場合は、それらをリスト (list) 内にバンドルできます。

R
get_stats <- function(v) {
  stats <- list(
    mean_val = mean(v),
    max_val = max(v)
  )
  return(stats)
}

results <- get_stats(c(10, 20, 30))
print(results$mean_val) # Prints 20

匿名関数と sapply

匿名関数 (インラインで定義された名前のない関数) は、sapply() のような関数と組み合わせると、ベクトルまたはリストの要素に素早い変換を適用する場合に非常に便利です。

最新の R (バージョン 4.1.0 以降) では、従来の function(x) に加えて、短縮構文 \(x) を使用して匿名関数を定義できます。

R
v <- c(1, 2, 3)

# Using sapply with a classic anonymous function
sapply(v, function(x) x^2) # 1 4 9

# Using sapply with shorthand syntax (R >= 4.1.0)
sapply(v, \(x) x^2) # 1 4 9

自分で試してみてください

運動#r.m3.l1.e1
試行回数: 0読み込み中…

単一の引数 x を受け取り、return() を使用してその double (x * 2) を返す double_value という名前の関数を定義します。

エディターを読み込み中…
ヒントを表示

使い方: double_value <- function(x) { return(x * 2) }

3 回の試行後に解決策が利用可能になります

運動#r.m3.l1.e2
試行回数: 0読み込み中…

幅と高さの 2 つの引数を受け入れる、calculate_area という名前の関数を定義します。関数は return() を使用して積を返す必要があります。

エディターを読み込み中…
ヒントを表示

width と height パラメータを使用して関数を定義し、width * height を返します。

3 回の試行後に解決策が利用可能になります

運動#r.m3.l1.e3
試行回数: 0読み込み中…

必須の引数 amount とオプションの引数 rate をデフォルト値 0.22 で受け入れる、calculate_tax という名前の関数を定義します。商品金額×レートを返します。

エディターを読み込み中…
ヒントを表示

米国: Calculate_tax <- function(amount, rate = 0.22) { return(amount * rate) }

3 回の試行後に解決策が利用可能になります

運動#r.m3.l1.e4
試行回数: 0読み込み中…

ベクトル v を受け入れる、analyze_vector という名前の関数を定義します。この関数は、sum (sum(v) で計算されたベクトルの合計) と len (length(v) で計算されたベクトルの長さ) という名前の 2 つの要素を含むリストを返す必要があります。

エディターを読み込み中…
ヒントを表示

次の構文を使用します。analyze_vector <- function(v) { return(list(sum = sum(v), len = length(v))) }

3 回の試行後に解決策が利用可能になります

運動#r.m3.l1.e5
試行回数: 0読み込み中…

ベクトル v が与えられた場合、sapply() 関数と無名関数を使用して、各要素の値を 3 倍にします (3 倍します)。結果を 3 倍にした変数に保存します。

エディターを読み込み中…
ヒントを表示

使用方法: 3 倍 <- sapply(v, function(x) x * 3)

3 回の試行後に解決策が利用可能になります