Code Fix

初級

文字列と数値を + で連結すると 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       )
                    ^
Error in "Age: " + age : non-numeric argument to binary operator

Rの+は数値同士専用の演算子で、文字列との連結には使えません。paste0()を使う必要があります。

直し方: "Age: " + age を paste0("Age: ", age) にします。

この問題を解いてみる →

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

パターン2

 1  count <- 5
 2  print("Count is " + count       )
                       ^
Error in "Count is " + count : non-numeric argument to binary operator

+で文字列と数値をつなごうとすると、暗黙の型変換は行われずエラーになります。

直し方: "Count is " + count を paste0("Count is ", count) にします。

この問題を解いてみる →

パターン3

 1  year <- 2026
 2  print("Year " + year       )
                    ^
Error in "Year " + year : non-numeric argument to binary operator

数値を文字列に混ぜたい場合は、paste()やpaste0()を使って明示的に連結する必要があります。

直し方: "Year " + year を paste0("Year ", year) にします。

この問題を解いてみる →

パターン4

 1  score <- 100
 2  print("Score: " + score       )
                      ^
Error in "Score: " + score : non-numeric argument to binary operator

+は文字列同士にも数値同士にも使えますが、文字列と数値を混ぜることはできません。

直し方: "Score: " + score を paste0("Score: ", score) にします。

この問題を解いてみる →

パターン5

 1  temp <- 36
 2  print("Temp: " + temp       )
                     ^
Error in "Temp: " + temp : non-numeric argument to binary operator

他言語の+が何でも連結してくれる感覚のままだと、Rでは必ずこのエラーにぶつかります。

直し方: "Temp: " + temp を paste0("Temp: ", temp) にします。

この問題を解いてみる →

よくある誤解

「+は何でもいい感じに連結してくれるはず」という思い込みは誤りです。文字列をつなげたい場合はpaste()やpaste0()を使う必要があります。

実務での勘所

paste()とpaste0()は似ていますが既定の区切り文字が違います。paste("年齢:", 20)は間にスペースが入り"年齢: 20"になりますが、paste0("年齢:", 20)は区切り無しで"年齢:20"になります(paste0はpaste(..., sep = "")と同じ意味です)。数値を文字列に埋め込むだけで余計な空白を入れたくない場面ではpaste0、単語同士を自然に並べたい場面ではpasteが向いています。

演習をはじめる

関連するエラー

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