Bir işlevde, yerel ayarı değiştirmek, bazı şeyler yapmak ve sonra değiştirmek istiyorum. Çünkü yan etkiler kötüdür.R'deki yerel ayarı değiştirmek ve değiştirmek için güvenilir bir yol nedir?
old_locale <- Sys.getlocale()
# do some stuff
Sys.setlocale(old_locale)
Ancak Sys.setlocale
bir category
ve locale
bağımsız değişken gerektirir.
"LC_COLLATE=English_Australia.1252;LC_CTYPE=English_Australia.1252;LC_MONETARY=English_Australia.1252;LC_NUMERIC=C;LC_TIME=English_Australia.1252"
Tamam: Öte yandan
,Sys.getlocale()
bana bu verir. Muhtemelen bununla başa çıkabilirim:
old_locale <- Sys.getlocale()
locale_key_values <- strsplit(strsplit(old_locale, ';')[[1]], '=')[[1]], '=')
locale_keys <- lapply(locale_key_values, getElement, name=1)
locale_values <- lapply(locale_key_values, getElement, name=2)
# do some stuff
mapply(Sys.setlocale, category=locale_keys, locale=locale_values)
Sorun çözüldü!
... ya da değil mi?
Sys.setlocale(locale='C')
Sys.getlocale()
şimdi "C"
döndürür! Bu, yukarıdaki anahtar-değer çözümleyici ile çalışmayacak.
Ve aniden, yereller veya Sys.getlocale()
'un dönebileceği dizeler hakkında hiçbir şey bilmediğimi anlıyorum.
Herkes, yerel durumu kaydetmek ve geri yüklemek için güvenilir bir yol biliyor mu?
Akıllı fikir, keşke bu kadar kolay olsaydı! Sys.setlocale tam olarak iki argüman, bir kategori ve bir yer alır. Örneğin LC_MONETARY argümanını kabul etmeyecektir. Kodunuzu çalıştırırken aşağıdaki hatayı alıyorum: 'Hata (işlev (kategori =" LC_ALL ", locale =" "): kullanılmayan argümanlar (" LC_MONETARY = English_Australia.1252 "," LC_NUMERIC = C "," LC_TIME = English_Australia) 0,1252") ' – logworthy