以下のコードを参照してください。日付を変換できるようにロケールを変更する必要があります。最初の試行は失敗し、2度目の試行はうまくいきますが、冗長であり、Sys.getlocale
の出力は変わりません。Sys.setlocaleの予期しない動作
私のOSは、私がSys.getlocale
の最初の呼び出しをスキップすることができ、日付変換が動作するWindows 7の64ビット
Sys.getlocale() # "LC_COLLATE=French_Belgium.1252;LC_CTYPE=French_Belgium.1252;LC_MONETARY=French_Belgium.1252;LC_NUMERIC=C;LC_TIME=French_Belgium.1252"
date <- "Dec-11"
as.Date(date, format = "%b-%d") # NA
Sys.setlocale(locale = "UK") # "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
locale2 <- Sys.getlocale()
as.Date(date, format = "%b-%d") # NA
Sys.setlocale("LC_TIME", "English_United Kingdom")
locale3 <- Sys.getlocale() # "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
as.Date(date, format = "%b-%d") # "2017-12-11"
locale2 == locale3 # TRUE
です:
Sys.getlocale() # "LC_COLLATE=French_Belgium.1252;LC_CTYPE=French_Belgium.1252;LC_MONETARY=French_Belgium.1252;LC_NUMERIC=C;LC_TIME=French_Belgium.1252"
date <- "Dec-11"
as.Date(date, format = "%b-%d") # NA
Sys.setlocale("LC_TIME", "English_United Kingdom") #
locale4 <- Sys.getlocale() # "LC_COLLATE=French_Belgium.1252;LC_CTYPE=French_Belgium.1252;LC_MONETARY=French_Belgium.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
as.Date(date, format = "%b-%d") # "2017-12-11"
しかし、これは動作しません。
Sys.getlocale() # "LC_COLLATE=French_Belgium.1252;LC_CTYPE=French_Belgium.1252;LC_MONETARY=French_Belgium.1252;LC_NUMERIC=C;LC_TIME=French_Belgium.1252"
date <- "Dec-11"
as.Date(date, format = "%b-%d") # NA
Sys.setlocale(locale = "English_United Kingdom") #
locale5 <- Sys.getlocale() # "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
as.Date(date, format = "%b-%d") # NA
これはこの質問に関連しています:Converting integer format date to double format of date
:-)機能では、それはロケールと日付の書式に関するすべての質問に重要だが、あまりにもそれにあなたのOS情報を追加します。また、 'Sys.setlocale(locale =" UK ")の代わりに' Sys.setlocale(locale = "English_United Kingdom") 'を実行するとどうなりますか? –
更新された回答を参照してください –
私はいくつかのテストをやっていますが、何かが欠けていない限り、これはバグのようです。わかるべきことは、バグが実際にどこに座っているかだけです。それはRかもしれないが、これもWindowsかもしれない。今夜は別のシステムでチェックし、更新しておきます。私はR-develにも投稿しました.Rの専門家の中には、これについての光を照らすことができるという希望で、http://r.789695.n4.nabble.com/LC-TIME-not-set-correctly-by- Sys-setlocale-td4740135.html –