2016/11/17

2020/05/04

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

R言語入門

ライター:

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″)

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

 

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

R言語について、さらに学びたい方はR言語入門をご覧ください。

(totalcount 4,290 回, dailycount 94回 , overallcount 3,562,027 回)

ライター:

R言語入門

COMMENT

コメントを残す

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




CAPTCHA


  • Take   2016.12.6 1:58 PM

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

  • casaburanka   2017.7.23 9:58 AM

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

    > 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   2017.7.23 12:06 PM

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

    そのエラーメッセージが出るのは、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

    是非、お試しください。

  • Take   2016.12.6 1:58 PM

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

  • casaburanka   2017.7.23 9:58 AM

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

    > 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   2017.7.23 12:06 PM

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

    そのエラーメッセージが出るのは、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

    是非、お試しください。