我strtoi用以确定以下函数中的一周中的一周:
to.week <- function(x) strtoi(format(x, "%W"))
Run Code Online (Sandbox Code Playgroud)
它适用于大多数日期:
> to.week(as.Date("2015-01-11"))
[1] 1
Run Code Online (Sandbox Code Playgroud)
但是,当我在2015-02-23和之间尝试日期时2015-03-08,我得到NA的结果是:
> to.week(as.Date("2015-02-25"))
[1] NA
Run Code Online (Sandbox Code Playgroud)
能否请您解释一下导致问题的原因?
这是一个有效的实现:
to.week <- function(x) as.integer(format(x, "%W"))
Run Code Online (Sandbox Code Playgroud)
strtoi失败的原因是默认情况下,当它们以a开头时,它会尝试将数字解释为八进制"0".由于"%W"返回"08",并且八进制中不存在8,因此获得NA.来自?strtoi:
使用C函数strtol根据给定的基础将字符串转换为整数,或者根据C规则选择合适的基数.
...
对于十进制字符串as.integer同样有用.
此外,您可以使用:
week(as.Date("2015-02-25"))
Run Code Online (Sandbox Code Playgroud)
虽然您可能必须将其结果抵消1以符合您的期望.
你可以像这样稍微修改你的代码
to.week <- function(x) strtoi(format(x, "%W"), 10)
Run Code Online (Sandbox Code Playgroud)
并使用基数 10。