Mac版のRでマルチバイトエラーが出た時は...

[記事公開日]2016/11/17 [カテゴリー]R言語入門 Written by  IMIN

Rでファイルの読み込みを行おうとすると以下のようなエラーが出て、読み込みが出来ないことがあります。

error

make.names(col.names, unique = TRUE) でエラー:
'<83>O<83><8b><81>[<83>v' に不正なマルチバイト文字があります

特にMac OS で見られるエラーなんだそうです。これはファイルエンコーディングの問題で、読み込み時のオプションで

fileEncoding="CP932"

を指定することで、多くの場合は解決します。例えば、

プログラム

df <- read.csv("解析用データ.csv",header=T)

でcsvファイルを読み込もうとしたときにこのエラーが出た場合、

プログラム

df <- read.csv("解析用データ.csv",header=T,fileEncoding="CP932")

と読み込みの最後に、カンマで区切ってファイルエンコーディングを指定してあげましょう。

 

逆にファイルの書き出し時にも、マルチバイトエラーが出て、ファイルに書き出せないことがあります。その時も同様に、

プログラム

write.table(result,"解析結果.csv",sep=",",fileEncoding="CP932")

と読み込みの最後に、カンマで区切ってファイルエンコーディングを指定してあげましょう。

 

「マルチバイトな文字ってなんだ!」と苦しんでいる方は是非この方法をお試しください。

  • スポンサーリンク

  • 3 件のコメント

    • Take より:

      悩みが解決しました。ありがとうございます。

    • casaburanka より:

      お世話になります。
      下記のような表示がされますがどうすればどうが通りの表示がなされるのでしょうか?

      > mean(x$DISTANCE)
      [1] NA
      警告メッセージ:
      mean.default(x$DISTANCE) で:
      引数は数値でも論理値でもありません。NA 値を返します
      > mean(x$DISTANCE, na.rm=TRUE)
      [1] NA
      警告メッセージ:
      mean.default(x$DISTANCE, na.rm = TRUE) で:
      引数は数値でも論理値でもありません。NA 値を返します↓↓↓↓
      [1] 1.1875が正解ですよね
      mean.default(x$DISTANCE, na.rm = TRUE) この部分が気になります。
      mean.default→meanにするにはどうすれば良いのでしょうか?

      • IMIN より:

        コメントありがとうございます。

        そのエラーメッセージが出るのは、x$DISTANCEの一部のデータが数値データになっていない(もしくは、数値データを文字列として認識してしまっている)からの可能性があります。

        プログラム
        > a = c(1,2,3,4,5,6,7,8,9)
        > mean(a)
        [1] 5

        上記のように、全てが数値のデータに対して、mean()はうまくいきますが

        プログラム
        > b = c(1,2,3,4,5,6,”あ”)
        > mean(b)
        [1] NA
        警告メッセージ:
        mean.default(b) で: 引数は数値でも論理値でもありません。NA 値を返します

        のように、一つでも数字じゃない要素が含まれているとこのような警告が出ます。

        また、下記のように、数字を文字列として、入力した場合でも同様の警告文が出ます。

        プログラム
        > c = c(“1″,”2″,”3″,”4”)
        > mean(c)
        [1] NA
        警告メッセージ:
        mean.default(c) で: 引数は数値でも論理値でもありません。NA 値を返します

        この場合は、下記のように、as.numeric()という関数で、文字列を数字に直すことで解決する可能性があります。

        プログラム
        > c = as.numeric(c)
        > mean(c)
        [1] 2.5

        是非、お試しください。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA