lubridate as.numeric 中的意外值使用单位 arg 中的月值
Unexpected value in lubridate as.numeric using value months in units arg
当我在 lubridate 包中使用 as.numeric 和句点时,我无法理解在单位 arg 中使用月份值的结果。
也许是一个包?
a <- period(years = 1, months = 3, days = 1)
as.numeric(a, 'days')
as.numeric(a, 'years')
as.numeric(a, 'months')
结果:
> as.numeric(a, 'days')
[1] 457.5625
> as.numeric(a, 'years')
[1] 1.252738
> as.numeric(a, 'months')
[1] 0.1043948
> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint LMDE
locale:
[1] LC_CTYPE=es_AR.UTF-8 LC_NUMERIC=C LC_TIME=es_AR.UTF-8 LC_COLLATE=es_AR.UTF-8 LC_MONETARY=es_AR.UTF-8
[6] LC_MESSAGES=es_AR.UTF-8 LC_PAPER=es_AR.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=es_AR.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.5.0 purrr_0.2.2 readr_1.0.0 tidyr_0.6.1 tibble_1.2
[6] ggplot2_2.2.1 tidyverse_1.1.1 pgr_0.0.9002 myutilities_0.0.0.9014 magrittr_1.5
[11] lubridate_1.6.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.9 plyr_1.8.4 forcats_0.2.0 tools_3.3.2 jsonlite_1.2 gtable_0.2.0 nlme_3.1-128
[8] lattice_0.20-34 psych_1.6.12 DBI_0.5-1 RPostgreSQL_0.4-1 parallel_3.3.2 haven_1.0.0 stringr_1.1.0
[15] httr_1.2.1 xml2_1.1.1 hms_0.3 grid_3.3.2 R6_2.2.0 readxl_0.1.1 foreign_0.8-67
[22] reshape2_1.4.2 modelr_0.1.0 scales_0.4.1 assertthat_0.1 mnormt_1.5-5 rvest_0.3.2 colorspace_1.3-2
[29] stringi_1.1.2 lazyeval_0.2.0 munsell_0.4.3 broom_0.4.1
提前致谢
这看起来像是一个错误。我相信这种转换是使用 lubridate:::seconds_to_unit
完成的,它在 lubridate 版本 1.6.0 上看起来像这样:
> lubridate:::seconds_to_unit
function (secs, unit = "second")
{
switch(unit, second = secs, minute = secs/60, hour = secs/3600,
day = secs/86400, month = secs/(86400 * 365.25)/12, week = secs/(86400 *
7), year = secs/(86400 * 365.25), stop("invalid unit ",
unit))
}
<environment: namespace:lubridate>
注意这部分:
month = secs/(86400 * 365.25)/12
很明显这里的想法是 86400*365.25
是每年的秒数,用它除以 12
得到每月的秒数。但应该是:
month = secs/((86400 * 365.25)/12)
(注意额外的括号。)
由于此错误,您得到的答案比应有的答案小 144 倍。
我相信这也是这个错误的原因:https://github.com/hadley/lubridate/issues/490
(那里描述为给出预期结果的倒数。那只是因为他们碰巧选择了 12 个月的间隔,所以除以 144 得到的是 1/12 个月。)
当我在 lubridate 包中使用 as.numeric 和句点时,我无法理解在单位 arg 中使用月份值的结果。 也许是一个包?
a <- period(years = 1, months = 3, days = 1)
as.numeric(a, 'days')
as.numeric(a, 'years')
as.numeric(a, 'months')
结果:
> as.numeric(a, 'days')
[1] 457.5625
> as.numeric(a, 'years')
[1] 1.252738
> as.numeric(a, 'months')
[1] 0.1043948
> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint LMDE
locale:
[1] LC_CTYPE=es_AR.UTF-8 LC_NUMERIC=C LC_TIME=es_AR.UTF-8 LC_COLLATE=es_AR.UTF-8 LC_MONETARY=es_AR.UTF-8
[6] LC_MESSAGES=es_AR.UTF-8 LC_PAPER=es_AR.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=es_AR.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.5.0 purrr_0.2.2 readr_1.0.0 tidyr_0.6.1 tibble_1.2
[6] ggplot2_2.2.1 tidyverse_1.1.1 pgr_0.0.9002 myutilities_0.0.0.9014 magrittr_1.5
[11] lubridate_1.6.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.9 plyr_1.8.4 forcats_0.2.0 tools_3.3.2 jsonlite_1.2 gtable_0.2.0 nlme_3.1-128
[8] lattice_0.20-34 psych_1.6.12 DBI_0.5-1 RPostgreSQL_0.4-1 parallel_3.3.2 haven_1.0.0 stringr_1.1.0
[15] httr_1.2.1 xml2_1.1.1 hms_0.3 grid_3.3.2 R6_2.2.0 readxl_0.1.1 foreign_0.8-67
[22] reshape2_1.4.2 modelr_0.1.0 scales_0.4.1 assertthat_0.1 mnormt_1.5-5 rvest_0.3.2 colorspace_1.3-2
[29] stringi_1.1.2 lazyeval_0.2.0 munsell_0.4.3 broom_0.4.1
提前致谢
这看起来像是一个错误。我相信这种转换是使用 lubridate:::seconds_to_unit
完成的,它在 lubridate 版本 1.6.0 上看起来像这样:
> lubridate:::seconds_to_unit
function (secs, unit = "second")
{
switch(unit, second = secs, minute = secs/60, hour = secs/3600,
day = secs/86400, month = secs/(86400 * 365.25)/12, week = secs/(86400 *
7), year = secs/(86400 * 365.25), stop("invalid unit ",
unit))
}
<environment: namespace:lubridate>
注意这部分:
month = secs/(86400 * 365.25)/12
很明显这里的想法是 86400*365.25
是每年的秒数,用它除以 12
得到每月的秒数。但应该是:
month = secs/((86400 * 365.25)/12)
(注意额外的括号。)
由于此错误,您得到的答案比应有的答案小 144 倍。
我相信这也是这个错误的原因:https://github.com/hadley/lubridate/issues/490
(那里描述为给出预期结果的倒数。那只是因为他们碰巧选择了 12 个月的间隔,所以除以 144 得到的是 1/12 个月。)