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エラーは起きません。逆に...が無い関数は、定義された数を超える引数を一切許容しません。エラーメッセージを見て「その関数が...を受け取れる設計かどうか」を確認すると、なぜここでだけこのエラーになるのかが分かります。