在R中使用as_hms转换字符串为hms时如何强制转换而非报错?
在R中用as_hms处理无法转换的字符串
as_hms函数默认会对不符合时间格式的字符串抛出错误,且确实没有内置的强制转换参数。要把无法转换的值转为NA而非报错,可通过以下两种方法实现:
方法1:自定义安全转换函数(用tryCatch捕获错误)
遍历每个输入字符串,用tryCatch捕获转换失败的情况,返回NA:
library(hms) safe_as_hms <- function(x) { result <- sapply(x, function(val) { tryCatch(as_hms(val), error = function(e) NA_real_) }, USE.NAMES = FALSE) as_hms(result) } # 测试调用 safe_as_hms(c('11:15:00',"12:00","3"))
执行结果:
01:11:15 00:12:00 NA
方法2:借助POSIXct中转
利用as.POSIXct对无效格式返回NA的特性,先转成POSIXct类型,再转为hms:
library(hms) x <- c('11:15:00',"12:00","3") # 转为POSIXct,无效格式自动返回NA posix_dt <- as.POSIXct(x, format = "%H:%M:%S", tz = "UTC") # 再转hms类型 as_hms(posix_dt)
两种方法对比:第一种更灵活,能适配更多异常场景;第二种代码更简洁,但依赖POSIXct的格式解析规则,仅适用于标准时间格式的字符串。
内容的提问来源于stack exchange,提问作者Matthew Son
相关产品推荐
相关产品推荐

