我想将数字变量转换为POSIXct
using anytime
。我的问题是anytime(<numeric>)
也转换输入变量 - 我想保留它。
简单的例子:
library(anytime)
t_num <- 1529734500
anytime(t_num)
# [1] "2018-06-23 08:15:00 CEST"
t_num
# [1] "2018-06-23 08:15:00 CEST"
这与“不按引用更新”行为不同as.POSIXct
in base
R:
t_num <- 1529734500
as.POSIXct(t_num, origin = "1970-01-01")
# [1] "2018-06-23 08:15:00 CEST"
t_num
# 1529734500
相似地,anydate(<numeric>)
还通过参考更新:
d_num <- 17707
anydate(d_num)
# [1] "2018-06-25"
d_num
# [1] "2018-06-25"
我在中找不到此行为的明确描述?anytime
。我可以用as.POSIXct
如上所述,但有谁知道如何处理这个问题anytime
?
anytime
作者在这里:这是标准的 R 和 Rcpp 以及路过-SEXP
行为:你无法保护SEXP
被改变而被传递。
认为anytime
需要的是您要求将输入转换为POSIXct
因为那就是anytime
作用:来自 char、来自 int、来自 Factor、来自任何内容。作为一个POSIXct
really is您将得到一个数值(加上 S3 类属性)。
如果你不想要这个(与设计相反anytime
)您可以执行 @Moody_Mudskipper 和 @PKumar 所示的操作:使用临时表达式(或变量)。
(我也认为data.table
例子有点不公平data.table
- 就像Rcpp
——非常明确地要求尽可能引用参考文献。所以当然它指的是原始变量。如果您需要的话,有一些用于深层复制的习语。)
最后,一个明显的技巧是使用format
如果你只是想要不同的显示:
R> d <- data.frame(t_num=1529734500)
R> d[1, "posixct"] <- format(anytime::anytime(d[1, "t_num"]))
R> d
t_num posixct
1 1529734500 2018-06-23 01:15:00
R>
这会以同样的方式工作data.table
当然,因为字符串表示是类型更改。同上IDate
/ ITime
.
Edit:自 2017 年 6 月以来,Github 存储库中的开发版本已经具有保留传入参数的功能。因此,下一个 CRAN 版本,无论何时我推送它,也会有它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)