我可以将包含小时、分钟或秒规格的字符串转换为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的一个合法单位
> as.difftime("12 w", "%…")我是不是忽略了什么?
发布于 2018-08-02 08:40:56
罗兰指出:
过了几个小时就不管用了。…很明显,如果你研究了密码。相关部分是 衍射时间(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的时间间隔字符串被视为时间点,从该时间字符串中减去当前的0h。由于各种原因,具有字符串的as.difftime在几天或几周内无法使用,例如,strptime不接受0天的值,尽管它作为间隔是完全有效的。
对于R-devel邮件列表的评论请求并没有引起广泛的回应。(我通过私人邮件从Emil Bode那里收到了一些宝贵的想法,因此我不会在这里复制。)因此,我将不建议对as.difftime进行更改,也因为更改它会导致R版本之间的差异。
https://stackoverflow.com/questions/51499883
复制相似问题