2016/11/17
2020/05/04
Mac版のRでマルチバイトエラーが出た時は…
Rでファイルの読み込みを行おうとすると以下のようなエラーが出て、読み込みが出来ないことがあります。
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言語入門をご覧ください。
COMMENT
-
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の一部のデータが数値データになっていない(もしくは、数値データを文字列として認識してしまっている)からの可能性があります。
> mean(a)
[1] 5
上記のように、全てが数値のデータに対して、mean()はうまくいきますが
> mean(b)
[1] NA
警告メッセージ:
mean.default(b) で: 引数は数値でも論理値でもありません。NA 値を返します
のように、一つでも数字じゃない要素が含まれているとこのような警告が出ます。
また、下記のように、数字を文字列として、入力した場合でも同様の警告文が出ます。
> mean(c)
[1] NA
警告メッセージ:
mean.default(c) で: 引数は数値でも論理値でもありません。NA 値を返します
この場合は、下記のように、as.numeric()という関数で、文字列を数字に直すことで解決する可能性があります。
> mean(c)
[1] 2.5
是非、お試しください。