文字列と数値を + で連結すると non-numeric argument エラーになる
Rの+演算子は数値同士専用で、文字列を連結する演算子ではありません。文字列と数値を+でつなごうとすると、暗黙の型変換が行われずエラーになります。
エラーメッセージの読み方
Error in "Age: " + age : non-numeric argument to binary operator
Error- エラー種別 — 実行中に発生しました
"Age: " + age- 発生箇所 — エラーの原因になった呼び出し
non-numeric argument to binary operator- 詳細メッセージ — 何が問題だったか
このエラーが出る典型パターン
パターン1
1 age <- 20 2 print("Age: " + age ) ^
Rの+は数値同士専用の演算子で、文字列との連結には使えません。paste0()を使う必要があります。
直し方: "Age: " + age を paste0("Age: ", age) にします。
パターン2
1 count <- 5 2 print("Count is " + count ) ^
+で文字列と数値をつなごうとすると、暗黙の型変換は行われずエラーになります。
直し方: "Count is " + count を paste0("Count is ", count) にします。
パターン3
1 year <- 2026 2 print("Year " + year ) ^
数値を文字列に混ぜたい場合は、paste()やpaste0()を使って明示的に連結する必要があります。
直し方: "Year " + year を paste0("Year ", year) にします。
パターン4
1 score <- 100 2 print("Score: " + score ) ^
+は文字列同士にも数値同士にも使えますが、文字列と数値を混ぜることはできません。
直し方: "Score: " + score を paste0("Score: ", score) にします。
パターン5
1 temp <- 36 2 print("Temp: " + temp ) ^
他言語の+が何でも連結してくれる感覚のままだと、Rでは必ずこのエラーにぶつかります。
直し方: "Temp: " + temp を paste0("Temp: ", temp) にします。
よくある誤解
「+は何でもいい感じに連結してくれるはず」という思い込みは誤りです。文字列をつなげたい場合はpaste()やpaste0()を使う必要があります。
実務での勘所
paste()とpaste0()は似ていますが既定の区切り文字が違います。paste("年齢:", 20)は間にスペースが入り"年齢: 20"になりますが、paste0("年齢:", 20)は区切り無しで"年齢:20"になります(paste0はpaste(..., sep = "")と同じ意味です)。数値を文字列に埋め込むだけで余計な空白を入れたくない場面ではpaste0、単語同士を自然に並べたい場面ではpasteが向いています。