argument is missing, with no default の原因と直し方
関数が必要とする引数を渡し忘れると、デフォルト値が定義されていない限りこのエラーになります。
エラーメッセージの読み方
Error in f(1) : argument "b" is missing, with no default
Error- エラー種別 — 実行中に発生しました
f(1)- 発生箇所 — エラーの原因になった呼び出し
argument "b" is missing, with no default- 詳細メッセージ — 何が問題だったか
このエラーが出る典型パターン
パターン1
1 f <- function(a, b) { 2 a + b 3 } 4 print(f(1 )) ^
Error in f(1) : argument "b" is missing, with no default
fは引数を2つ必要としますが、1つしか渡していません。デフォルト値の無い引数は省略できません。
直し方: (空) を , 6 にします。
広告
広告スロット(未設定)
パターン2
1 greet <- function(name, greeting) { 2 paste(greeting, name) 3 } 4 print(greet("Taro" )) ^
Error in greet("Taro") : argument "greeting" is missing, with no default
2番目の引数を渡し忘れると、その場でエラーになります。NULLやNAで自動的に補われることはありません。
直し方: (空) を , "Hello" にします。
パターン3
1 area <- function(width, height) { 2 width * height 3 } 4 print(area(5 )) ^
Error in area(5) : argument "height" is missing, with no default
引数の数が定義と一致しないと、関数の中身が実行される前にエラーになります。
直し方: (空) を , 4 にします。
パターン4
1 full_name <- function(first, last) { 2 paste(first, last) 3 } 4 print(full_name("Taro" )) ^
Error in full_name("Taro") : argument "last" is missing, with no default
呼び出し時に渡す引数の数は、関数定義の引数の数と正確に一致させる必要があります。
直し方: (空) を , "Yamada" にします。
パターン5
1 subtract <- function(a, b) { 2 a - b 3 } 4 print(subtract(10 )) ^
Error in subtract(10) : argument "b" is missing, with no default
デフォルト値が定義されていない引数は、呼び出し時に必ず値を渡す必要があります。
直し方: (空) を , 4 にします。
よくある誤解
「渡さなかった引数は自動的にNULLやNAで補われるはず」という思い込みは誤りです。デフォルト値の無い引数を省略すると、その場でエラーになります。
実務での勘所
このエラーが発生するタイミングは、関数を呼び出した瞬間ではありません。Rの引数は遅延評価(実際にその引数を使う行に到達するまで評価されない)という仕組みを持っているため、f(1)のように必須引数を渡し忘れても、関数の呼び出し自体はいったん成功します。関数の中でその渡されなかった引数を実際に使おうとした行に到達して初めて、'argument is missing'エラーが発生します。エラーメッセージが出た場所と、本当の原因(呼び出し時の渡し忘れ)の行が離れていることがあるのは、この遅延評価のためです。