3

以下に再現可能な例を書いてみました。これは、.Rmdと.rの組み合わせです。うまくいけば、あなたは理由を見ることができます。

私が抱えている問題は、コードがコンソールで直接実行されるか、HTMLに編まれているかによって、英語以外の文字の扱いが異なることです。

以下の例では、üとöの文字を使用して小さなdata.frameを作成し、それをcsvに書き込んでから、もう一度読み込みます。

書き込みと読み取りの両方がチャンクの内側または外側で行われる場合、すべてが順調です。

しかし、書き込みと読み取りが異なる場所で行われる場合は、異なるエンコーディングが使用されます(私は思います)。と文字が混同されます。

つまり、データを読み込むときは、.RmdファイルをコンパイルするときにRで直接作業するときとは異なるエンコーディングが必要になります。

私が見る限り、ロケールは常に同じであるため、何が起こっているのかわかりません。

何か案は?

csvを直接読み書きして、新しいデータファイルを作成します

df2 <- data.frame(Cäl1 = c(1,2), Col2 = c("ü","a")) 

write.csv(df2, file="df2.csv")

read.csv("df2.csv")

Sys.getlocale(category = "LC_ALL")

次に、ドキュメント全体を編んでみてください(チャンクを実行するだけで動作が異なります)

```{r read_inside}

read.csv("df2.csv")

Sys.getlocale(category = "LC_ALL")

```

data.frameがチャンク内に作成されるため、この2番目のチャンクは機能します

```{r write_read_inside}


df2 <- data.frame(Cäl1 = c(1,2), Col2 = c("ü","a")) 
write.csv(df2, file="df2.csv")
read.csv("df2.csv")

Sys.getlocale(category = "LC_ALL")

```

セッション情報:

R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252    LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                            LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] tools_2.15.0
4

1 に答える 1

2

したがって、答えはUTF8エンコーディングを保証することwrite.csv(..., fileEncoding = 'UTF-8')です。根本的な問題は、実際にはRStudioがデフォルトでUTF8を使用することでしたが、RはデフォルトでOSのネイティブエンコーディングを使用します。RにUTF8を使用するように依頼するwrite.csvか、RStudioにネイティブエンコーディングを使用するように依頼することができます(options(encoding = 'native.enc'))。

于 2012-06-25T14:47:27.533 に答える