r - 如何在r中循环显示真实日期
问题描述
当我在循环中迭代日期时,R 会打印出日期的数字编码。
例如:
dates <- as.Date(c("1939-06-10", "1932-02-22", "1980-03-13", "1987-03-17",
"1988-04-14", "1979-08-28", "1992-07-16", "1989-12-11"), tryFormats = c("%Y-%m-%d"))
for(d in dates){
print(d)
}
输出如下:
[1] -11163
[1] -13828
[1] 3724
[1] 6284
[1] 6678
[1] 3526
[1] 8232
[1] 7284
如何让 R 打印出实际日期?所以输出显示:
[1] "1939-06-10"
[1] "1932-02-22"
[1] "1980-03-13"
[1] "1987-03-17"
[1] "1988-04-14"
[1] "1979-08-28"
[1] "1992-07-16"
[1] "1989-12-11"
谢谢!
解决方案
当您在 R中的循环中使用dates
as时,它会丢失其属性。seq
for
您可以使用as.vector
剥离属性并亲自查看(或dput
查看完整对象的幕后情况):
as.vector(dates)
# [1] -11163 -13828 3724 6284 6678 3526 8232 7284
dput(dates)
# structure(c(-11163, -13828, 3724, 6284, 6678, 3526, 8232, 7284), class = "Date")
在 R 中,Date
对象只是带有(是一个属性) 的numeric
向量。class
Date
class
因此,您会看到数字(FWIW,这些数字从 开始计算天数1970-01-01
)。
要恢复Date
属性,可以使用.Date
函数:
for (d in dates) print(.Date(d))
# [1] "1939-06-10"
# [1] "1932-02-22"
# [1] "1980-03-13"
# [1] "1987-03-17"
# [1] "1988-04-14"
# [1] "1979-08-28"
# [1] "1992-07-16"
# [1] "1989-12-11"
这相当于as.Date(d, origin = '1970-01-01')
,numeric
方法为as.Date
。
有趣的是,*apply
函数不会剥离属性:
invisible(lapply(dates, print))
# [1] "1939-06-10"
# [1] "1932-02-22"
# [1] "1980-03-13"
# [1] "1987-03-17"
# [1] "1988-04-14"
# [1] "1979-08-28"
# [1] "1992-07-16"
# [1] "1989-12-11"
推荐阅读
- python - “if”块内没有打印
- python-3.x - 如何在 Python 上设置模拟异常行为?
- ios - Xcode 12:错误:无法加载代码生成器
- date - Caml查询过滤不起作用,显示所有项目
- vuejs2 - Vue2 JS - 表单中的 v-for 组件
- javascript - 在 React 中重定向到相同的登录路径
- java - Quartz调度器下一次执行时间等于当前时间加上调度器间隔
- python - Django 自定义用户 UUID 重复(缓存?)
- c# - 使用 Quickbooks SDK 13.0 的日期范围内所有客户的 JobProfitabilityDetail 报告
- python - 注释在模板中不可见,即使它们保存在数据库中