【问题标题】:Get weekdays in English in R在 R 中获取英语的工作日
【发布时间】:2013-06-06 12:41:58
【问题描述】:

我在美国以外的地方使用 R,一切都用英语运行,但 weekdays() 的结果仍然是西班牙语:

Day <- seq(as.Date("2013-06-01"), by=1, len=30)
weekdays(Day)
[1] "sábado"    "domingo"   "lunes"     "martes"    "miércoles"  (...)

关于如何用英语获得工作日的任何想法?

【问题讨论】:

  • 这是由您在 Linux/UNIX 中的语言环境设置引起的尝试:(Sys.setenv("LANGUAGE"="En")。我假设在 Windows 中同样有效,但我不知道第一手资料.
  • 谢谢 jim mcnamara,我使用的是 Ubuntu,但即使在 Sys.setenv 之后,我仍然会得到西班牙语的 weekdays()!
  • 那我没有答案。对不起。
  • 这行得通吗:Sys.setlocale("LC_TIME", "en_US"); weekdays(Sys.Date()+0:6)?
  • 谢谢 Josh O'Brien,这就是我得到的:警告消息:在 Sys.setlocale("LC_TIME", "en_US") 中:操作系统报告将区域设置设置为“en_US”的请求不能荣幸

标签: r date locale weekday


【解决方案1】:

DatePOSIX*t 对象的打印似乎由 LC_TIME 语言环境类别控制。

在 Windows 上,您可以这样更改:

## First, save the current value so we can restore it later
Sys.getlocale("LC_TIME")
# [1] "English_United States.1252"

## First in Spanish
Sys.setlocale("LC_TIME","Spanish Modern Sort")
# [1] "Spanish_Spain.1252"
weekdays(Sys.Date()+0:6)
# [1] "lunes"     "martes"    "miércoles" "jueves"    "viernes"   "sábado"   
# [7] "domingo"  

## Then back to (US) English
Sys.setlocale("LC_TIME","English United States")
# [1] "English_United States.1252"
weekdays(Sys.Date()+0:6)
# [1] "Monday"    "Tuesday"   "Wednesday" "Thursday"  "Friday"    "Saturday" 
# [7] "Sunday" 

在大多数 *NIX 上,相当于:

Sys.setlocale("LC_TIME", "en_US")

?Sys.setlocale 中所述,特定的语言环境名称取决于操作系统。对于 Windows 接受的名称,see here。对于 Linux 接受的名称,see here

【讨论】:

  • 作为受限用户,这对我在 Windows 或 linux 上都不起作用 - “操作系统报告请求 ... 无法兑现”
  • 这可能是与Sys.setlocale 不同的参数。在 Mac 上,返回英文的参数是“en_US.UTF-8”。
  • 谢谢大家!我相信这适用于 Ubuntu:> Sys.setlocale("LC_TIME", "C")
  • @eddi -- 这只是我在使用无效的语言环境名称时收到的错误消息...出于好奇,当您输入 Sys.getlocale("LC_TIME") 时会得到什么?另外,这是否有效,还是会给您一个错误:Sys.setlocale("LC_TIME", Sys.getlocale("LC_TIME"))
  • 我明白了,谢谢。最后一个表达式没有出错,我在 linux 上的语言环境是“C”,在 Windows 上是“English_United States.1252”。在 Windows 上,“Spanish Modern Sort”或“Spanish_Modern_Sort”不起作用,但例如“Spanish_Argentina”有效。我想这与操作系统设置的特殊性有关。
【解决方案2】:

通过我的answer here,您可以使用英语获得工作日,而不会像这样混淆语言环境:

c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", 
  "Friday", "Saturday")[as.POSIXlt(Day)$wday + 1]

【讨论】:

  • 你确定这不依赖于语言环境吗?并非所有国家/地区的工作日都从星期日开始
  • @eddi,我很确定,因为POSIXlt 是基于struct tmtm_wday 是“自周日以来的天数”......编辑:因为?POSIXltwday是“一周中的 0-6 天,从星期日开始。”
  • list_wday_en
【解决方案3】:
Sys.setlocale("LC_TIME", "C")

为我做了诀窍。这也不会给我们带来OS reports request to set locale to "EN" cannot be honored 错误消息。

【讨论】:

    【解决方案4】:

    windows下RStudio

    Sys.setlocale("LC_TIME", "English")

    那是唯一对我有用的东西。

    【讨论】:

      【解决方案5】:

      我在尝试将语言环境从 es_ES 更改为 en_US(均为 UTF-8)时遇到了同样的问题。

      R 消息由 R 主工作区给出,因为它不能更改系统区域设置。如果将代码插入到 R 脚本中,则会创建一个新的工作区(正在运行的工作区),并且可以覆盖区域设置。

      在我的代码中,我包含了以下几行:

      curr_locale <- Sys.getlocale("LC_TIME")
      Sys.setlocale("LC_TIME","en_US.UTF-8")
      
      #<specific code for graph generation>
      
      Sys.setlocale("LC_TIME",curr_locale)
      

      改变了!

      【讨论】:

        【解决方案6】:

        这个怎么样:

        dev_null <- Sys.setlocale("LC_TIME", "english")
        

        【讨论】:

        • 这与@EdgarGithub 的回答有何不同?
        • 它不会导致此警告:警告消息:在 Sys.setlocale("LC_TIME", "english") 中:操作系统报告将语言环境设置为“en_US”的请求无法兑现@MrBeanBremen
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        相关资源
        最近更新 更多