捕获无法在R中转换为日期的字符串

时间:2012-04-23 04:34:03

标签: r error-handling

如果字符串无法转换为日期,我想创建一个if语句,如下所示:

as.Date("2010-00-01")

但是运行上面的行只是继续给出错误输出:

Error in charToDate(x) : 
  character string is not in a standard unambiguous format

我不能将它用于if语句,如果字符串无法转换为日期,如何使用if语句?感谢。

2 个答案:

答案 0 :(得分:5)

这是一个快速定义:

isDatable <- function(x) tryCatch(as.Date(x), error = function(e) FALSE)

然后,

> isDatable("2012-00-01")
[1] FALSE
> isDatable("2012-01-01")
[1] "2012-01-01"

因此您可以使用if

if (!isDatable("2012-00-01")) {
    # something 
}

答案 1 :(得分:4)

提供format arg,这样就不会有歧义。然后,错误的日期将始终变为NA

d <- as.Date("2010-01-31", format="%Y-%m-%d") # OK
is.na(d) # FALSE

d <- as.Date("2010-00-31", format="%Y-%m-%d") # NA
is.na(d) # TRUE