niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) Windows上で parzer パッケージが動かないやつの暫定対応

なんでしょうね

ちょっとkuniezuパッケージを試してみたかったんですが、

github.com

内部で使ってるparzerパッケージがエラー吐いて止まる(Win、32bit版)か止まってしまって処理が返ってこない(Win, 64bit版)という挙動をしていました。

再現できるコードはこれ。

parzer::parse_lon("10")

RToolsは4.0の最新版を入れなおしてもダメでした。一方、Ubuntu上では問題なく動作して、結果として一個前の記事が出来ました(ヨカッタネ)

ってことをTwitterに呟いていたら、僕らのユタ兄さんから、

というアドバイスをいただいて、上記コード実行前に

Sys.setlocale(locale = "C") 

をしたら動くようにはなりました。が、原因がわからないのでちょっと調べてみます。昔のバージョンなら問題なかったのではないだろうか、とかそのあたりですね…(CRANのテストはもちろん通った状態でリリースされているのでそこら辺ではなさそう)

続報

その後、std::regexが問題とわかり…

結局、gccに問題があるのではということまで来ました(主にユタ兄さんの解析によって)

現状では先にあげたように、localeを設定してやり過ごすのが対策になりそうです。ちなみに、regex[]がダメっぽくて、[0]はダメ、(a+)*\dみたいなのはOKでした。こんなこと(コンパイラのバグ)ってあるんですねぇ…(Windowsの日本語localeのみで発生するregexのバグ…)

ちなみに、Windows上でSys.getlocale()するとこうなります。この環境下でのみ発生する、という感じですね(ubuntuのutf8環境では問題なかった)

> Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"