与as.difftime不一致

时间:2018-07-24 13:28:08

标签: r

我可以将包含小时,分钟或秒规格的字符串转换为difftime

> as.difftime("12 h", "%H")
Time difference of 12 hours
> as.difftime("12 m", "%M")
Time difference of 12 mins
> as.difftime("12 s", "%S")
Time difference of 12 secs

但是我不能使用星期说明,因为没有适当的格式…,尽管"weeks"difftime的合法 unit

> as.difftime("12 w", "%…")

我在俯视什么吗?

1 个答案:

答案 0 :(得分:0)

罗兰指出:

  

它不能工作超过几个小时。 ……很明显,如果您学习代码。相关的部分是

difftime(strptime(tim, format = format), strptime("0:0:0", format = "%X"), units = units)
     

。如果您仅为strptime指定时间,则会添加当前日期。

实际上,在 R控制台研究代码很容易:

> as.difftime
function (tim, format = "%X", units = "auto") 
{
    if (inherits(tim, "difftime")) 
        return(tim)
    if (is.character(tim)) {
        difftime(strptime(tim, format = format), strptime("0:0:0", 
            format = "%X"), units = units)
    }
    else {
        if (!is.numeric(tim)) 
            stop("'tim' is not character or numeric")
        if (units == "auto") 
            stop("need explicit units for numeric conversion")
        if (!(units %in% c("secs", "mins", "hours", "days", "weeks"))) 
            stop("invalid units specified")
        .difftime(tim, units = units)
    }
}

问题的症结在于,使用strptime会使赋予as.difftime时间间隔字符串被视为时间点< / em>,从 当前天被减去。由于各种原因,这使得带有字符串的as.difftime在几天和几周内无法使用,例如strptime不接受0天的值,尽管它作为间隔是完全有效的。

R-devel邮件列表上的评论请求未引起广泛的响应。 (我从私人邮件中收到了来自Emil Bode的一些有价值的想法,因此在这里不再赘述。)因此,我将不建议对as.difftime进行更改,因为更改它会引入R版本之间的差异。