Code Fix

初級

unused argument の原因と直し方

関数が受け取れる数より多い引数を渡すと、余分な引数が「使われない引数」としてエラーになります。

エラーメッセージの読み方

Error in f(1, 2, 3) : unused argument (3)
Error
エラー種別 — 実行中に発生しました
f(1, 2, 3)
発生箇所 — エラーの原因になった呼び出し
unused argument (3)
詳細メッセージ — 何が問題だったか

このエラーが出る典型パターン

パターン1

 1  f <- function(a, b) {
 2    a + b
 3  }
 4  print(f(1, 2, 3))
                 ^
Error in f(1, 2, 3) : unused argument (3)

fは引数を2つしか受け取りません。余分な3つ目の引数は「使われない引数」としてエラーになります。

直し方: , 3 を (空) にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  greet <- function(name) {
 2    paste("Hello", name)
 3  }
 4  print(greet("Taro", "extra"))
                          ^
Error in greet("Taro", "extra") : unused argument ("extra")

可変長引数(...)を受け取る定義になっていない限り、余分な引数は無視されずエラーになります。

直し方: , "extra" を (空) にします。

この問題を解いてみる →

パターン3

 1  area <- function(width, height) {
 2    width * height
 3  }
 4  print(area(5, 4, 3))
                    ^
Error in area(5, 4, 3) : unused argument (3)

定義で受け取れる引数の数より多く渡すと、その場でunused argumentエラーになります。

直し方: , 3 を (空) にします。

この問題を解いてみる →

パターン4

 1  square <- function(x) {
 2    x * x
 3  }
 4  print(square(5, 6))
                   ^
Error in square(5, 6) : unused argument (6)

squareは引数を1つしか受け取らないので、2つ目を渡すとunused argumentになります。

直し方: , 6 を (空) にします。

この問題を解いてみる →

パターン5

 1  double <- function(n) {
 2    n * 2
 3  }
 4  print(double(4, 8))
                   ^
Error in double(4, 8) : unused argument (8)

余分な引数は自動で無視されるわけではなく、関数の定義通りの数を渡す必要があります。

直し方: , 8 を (空) にします。

この問題を解いてみる →

よくある誤解

「余分な引数は無視して実行してくれるはず」という思い込みは誤りです。可変長引数(...)を受け取る定義になっていない限り、渡した引数の数は厳密に一致している必要があります。

実務での勘所

このエラーが起きるのは、関数の定義に...(ドットドットドット)という可変長引数の受け皿が無い場合だけです。...を持つ関数は、定義されているパラメータ以外にいくつ余分な引数を渡されても、それらをまとめて吸収してくれるため、unused argumentエラーは起きません。逆に...が無い関数は、定義された数を超える引数を一切許容しません。エラーメッセージを見て「その関数が...を受け取れる設計かどうか」を確認すると、なぜここでだけこのエラーになるのかが分かります。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)