備忘ログ

チラシの裏的備忘録&メモ

RStudioでRマークダウンやRスクリプトを書いていると出る文字化けしたエラーを消す

エラー

Windows環境下でRStudioでRマークダウン(*.Rmd)やRスクリプト(.R)ファイルを書いているとfig.1のような文字化けエラーが書いてるあいだ頻発した。

f:id:indenkun:20200225223502p:plain

fig.1 RStudio文字化けエラー

解決策

作業フォルダがGoogleドライブと同期していたのを停止した。

エラーはでなくなった。

多分オンライストレージをローカルと同期していると仕様次第で同様のエラーが出ると思うので、Googleドライブ以外でも同期を停止するとでなくなる可能性があると思う。

 

解決策はここまで。

以下はなんでそういう解決策に至ったのか自分用のメモ。

実行環境

windows 10

RStudio 1.2xxx(多分Ver.はあまり重要じゃない)

R 3.6.x(多分Ver.はあまり重要じゃない)

ワーキングディレクトリがGoogleドライブで同期されていた(ここ重要)

 

エラーがでてから解決に至るまで

RStudioでRマークダウンを書いているとfig.1のようなエラーがでて作業が頻繁に中断されて困っていた。

ただし、別のプロジェクトではエラーが出ないで作業できていた。

文字化けエラーなので何のエラーなのかわからず、「RStudio 文字化けエラー」で検索すると

ja.stackoverflow.com

というページを発見。

自分の環境だけでなく、他の環境でも出ていることに安心。

このページの

そのファイルを他のテキストエディタで開いているとか、あるいは書き込みの権限がないファイルを修正して保存しようとしていないでしょうか?

Windows上のRStudioだと文字化けしてしまいますが、他のテキストエディタで開いているファイルをRStudioで保存させようとして同じエラーメッセージを出せたので、上記のような理由ではないかと思います。

という指摘が最終的に解決の糸口になったのだが、最初はこの質問者と同じで、RmdファイルやRスクリプトファイルは他のエディタとかで開いてないのにと思って解決に至らず。

次に

teratail.com

を見つけてページ内にある通り、ロケールの問題か?と思って色々いじってみたが直らず。

日本語を含むファイルが問題?

ファイル名に日本語が含まれていると問題?

といろいろ見当をつけてトライアンドエラーしてみてもエラーがトライトライトライしてくる。

そうしていると別プロジェクトでは出ないことに気づき、引条件の違いを確認するとGoogleドライブでフォルダごと同期させたフォルダの子フォルダをワーキングディレクトリに指定したプロジェクトだったことに気づく。

引用している一文も思い出して、「もしかして、Googleドライブのクライアントが同期のために参照しているのでエラーがでている?」と思い至りGoogleドライブの同期を停止。

するとエラーがその後でなくなった。

 

このことから推察するにおそらく、一時ファイルをGoogleドライブのクライアントが見つけて読み込んだときに、RStudio側で「別のプログラムがファイル開こうとしてるぞ!」と注意喚起してくれていたのが、文字化けして出ていたのではないかと思われる。

Googleドライブも頻繁にクロールして監視しているフォルダ内で変わったことがないか確認しているから、ファイルに変化が発生(=ファイルを弄っている間中)エラーがその都度散発してしまったと思われる(割とイライラする頻度)。

.RDataも.RhistoryもR終了まで生成されない?のかこちらはエラーがでないのかコンソール打ち込んでいるうちは出ないのがハマりやすいところかと思う。

(追記).RhistoryはR終了前から編集されている様子、RStudioのエディタのペインで操作しているものだけがエラーの対象のよう。

オンライストレージでローカルと同期できるものだと、仕様にもよると思うが、同様の動作をするものだと似たようなエラーが出ることがあると思う。

 今後の課題

思うばかりの内容を検証するには仮想環境でも英語環境を作って、Googleドライブで同期したフォルダ下で作業をして同様のエラーがでるか確認できればOKだが、詳細まで検証できず。

エラーも出なくなったので検証は「あとでやる」にしておく。

stack overflowの質問への回答は質問そのものが1年以上前のもので動作環境が違うことや、登録しない場合はメールアドレスの入力が必要なことが二の足を踏ませている(書いた)。

teratailのほうはそもそも回答方法がわからない。