随着最近Ubuntu(23.10 mantic)的更新,我的R不再识别"US/Eastern".

sessionInfo()
# R version 4.3.2 (2023-10-31)
# Platform: x86_64-pc-linux-gnu (64-bit)
# Running under: Ubuntu 23.10
# Matrix products: default
# BLAS:   /opt/R/4.3.2/lib/R/lib/libRblas.so 
# LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/liblapack.so.3;  LAPACK version 3.11.0
# locale:
#  [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8        LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
#  [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C           LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   
# time zone: America/New_York
# tzcode source: system (glibc)
# attached base packages:
# [1] stats     graphics  grDevices utils     datasets  methods   base     
# other attached packages:
# [1] r2_0.10.0
# loaded via a namespace (and not attached):
#  [1] compiler_4.3.2  clipr_0.8.0     fastmap_1.1.1   cli_3.6.2       tools_4.3.2     htmltools_0.5.7 rmarkdown_2.25  knitr_1.45      xfun_0.41      
# [10] digest_0.6.34   rlang_1.1.3     evaluate_0.23  

lubridate::with_tz(Sys.time(), tzone = "US/Eastern")
# Warning in with_tz.default(Sys.time(), tzone = "US/Eastern") :
#   Unrecognized time zone 'US/Eastern'
# [1] "2024-03-18 13:49:56"

然而,在一个类似配置(R—wise)的22.04 jammy系统上,它工作得很好.

sessionInfo()
# R version 4.3.2 (2023-10-31)
# Platform: x86_64-pc-linux-gnu (64-bit)
# Running under: Ubuntu 22.04.4 LTS
# Matrix products: default
# BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
# LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so;  LAPACK version 3.10.0
# locale:
#  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
# time zone: Etc/UTC
# tzcode source: system (glibc)
# attached base packages:
# [1] stats     graphics  grDevices utils     datasets  methods   base
# loaded via a namespace (and not attached):
# [1] compiler_4.3.2

lubridate::with_tz(Sys.time(), tzone = "US/Eastern")
# [1] "2024-03-18 09:49:19 EDT"

为什么一个正常识别的TZ变得不可用?


这在操作系统本身是真的,不仅仅是在R中:

$ TZ="America/New_York" date
Mon Mar 18 10:22:03 AM EDT 2024
$ TZ="US/Eastern" date
Mon Mar 18 02:22:07 PM  2024

(注意第二个输出中缺少的TZ)

推荐答案

关于使用"Country/Region"(如"US/Eastern")而不是"Continent/City"("America/New_York")的争论并不 fresh .后者的含糊性较小,地缘政治力量可以改变前者的含义.到目前为止(仍然是AFAICT),立场一直是保持向后兼容.

然而,当tzdata 2024发布时,Ubuntu 23.10上的包(2024a-0ubuntu0.23.10)不包括US/个符号链接;Ubuntu 22.04上的包does包含了链接(2024a-0ubuntu0.22.04)

基于https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/2058249,正确的(和预期的)修复是安装tzdata-legacy linux包(然后重新启动R).

下面是我的第一个解决方案/技巧,是在我了解tzdata-legacy包(上面)之前编写的.考虑到我拥有对底层文件系统的超级用户访问权限,黑客攻击非常容易.除非您出于某种原因不愿安装额外的包,否则您很可能会 Select tzdata-legacy.(这些符号链接是我想要的少数几个,tzdata-legacy包还有另外675个符号链接/文件.毕竟,一揽子计划的分拆影响的远不止US/*家.)

mkdir /usr/share/zoneinfo/US
cd /usr/share/zoneinfo/US
ln -s ../America/Anchorage Alaska
ln -s ../America/Adak Aleutian
ln -s ../America/Phoenix Arizona
ln -s ../America/Chicago Central
ln -s ../America/New_York Eastern
ln -s ../America/Indiana/Indianapolis East-Indiana
ln -s ../Pacific/Honolulu Hawaii
ln -s ../America/Indiana/Knox Indiana-Starke
ln -s ../America/Detroit Michigan
ln -s ../America/Denver Mountain
ln -s ../America/Los_Angeles Pacific
ln -s ../Pacific/Pago_Pago Samoa

之后,重新启动R("不应该"需要重新安装lubridatetimechange R包),然后它就可以工作了.(我不使用RStudio,但你可能需要重新启动它.欢迎对此的反馈).

lubridate::with_tz(Sys.time(), tzone = "US/Eastern")
# [1] "2024-03-18 09:55:08 EDT"

在一个shell中(在R之外)也是:

$ TZ="US/Eastern" date
Mon Mar 18 10:23:11 AM EDT 2024

R相关问答推荐

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

查找具有平局的多个列的最大值并返回列名或平局 destruct 者NA值

更改Heatmap Annotation对象的名称

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

在另一个函数中调用ggplot2美学

从BRM预测价值

R中插入符号训练函数的中心因子和尺度因子预测

合并DFS列表并将索引提取为新列

从一个列表的框架中移除列表包装器

Select 季度月值

如何将网站图像添加到带有极坐标的面包裹条形图?

R:用GGPLATE,如何在两个独立的变量中制作不同形状的散点图?

减少雨云面之间的间距并绘制所有统计数据点

使用ggplot2绘制具有边缘分布的坡度图

如何在R中使用因子行求和?

如何计算多个变量的百分比与总和的百分比?

从字符串列中的向量中查找第一个匹配的单词

通过不完全重叠的多个柱连接

如何在基数R中根据矩阵散点图中的因子给数据上色?

如何使用包含要子集的值的列表或数据框来子集多个列?