如果difftime
变量包含在 tibble 中,并且指定的观察次数等于其他变量,则保持该变量的类。
tibble::tibble(a = c(1,2), b = as.difftime(c(1,2), units = "hours"))
# A tibble: 2 x 2
a b
<dbl> <time>
1 1 1 hours
2 2 1 hours
但是,如果变量中指定的观察difftime
次数是另一个变量中观察次数的适当因子,从而使该difftime
变量被循环使用,则该变量的类默默地更改为numeric
:
tibble::tibble(a = c(1,2), b = as.difftime(1, units = "hours"))
# A tibble: 2 x 2
a b
<dbl> <dbl>
1 1 1
2 2 1
出现这种行为差异是否是因为tidyverse
鼓励用户使用period
或duration
提供的对象lubridate
来指定时间,而不是基础 R 的difftime
对象?或者这是一个意外的错误?
使用tibble::data_frame
, 和时也会出现同样的问题dplyr::data_frame
,尽管我相信这些可能会在未来被弃用。
需要明确的是,以下调用不会默默地更改时间类型变量的类:
tibble::tibble(a = c(1,2), b = lubridate::as.period("1H"))
# A tibble: 2 x 2
a b
<dbl> <S4: Period>
1 1 1H 0M 0S
2 2 1H 0M 0S
tibble::tibble(a = c(1,2), b = lubridate::as.duration("1H"))
# A tibble: 2 x 2
a b
<dbl> <S4: Duration>
1 1 3600s (~1 hours)
2 2 3600s (~1 hours)