使用unlist将日期型数据的列表转换为向量时,出现的异常

在使用unlist函数,将日期型的列表,转换为向量时,不会得到期望的结果,如下:

> dateLst <- list(Sys.Date())
> dateLst
[[1]]
[1] "2015-08-11"

> dateVector <- unlist(dateLst)
> dateVector
[1] 16658


同样的原因,在使用sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)时,如果X为日期型向量,FUN返回日期,那么结果不会是预期的日期型向量,如下:
> date.vector.string <- c("20010101")
> date.vector <- sapply(date.vector.string, get.date)
> date.vector
20010101 
   11323 

其中:
# Get date from date string. Assumed the format of date string is like "20011230"
#
# Args:
# date.string: date string like "20011230"
#
# Returns:
# date.
get.date <- function(date.string){
  #  deal with the Error in strptime(x, format, tz = "GMT") : input string is too long
  if(nchar(date.string) != 8)
    return(NA)
 
  date <- try(as.Date(date.string, "%Y%m%d"))
  return(date)
}

sapply的结果,看起来可以认为是先调用lapply,得到的list后,调用unlist,试图得到与date.vector.string同类型的结果即向量。

考虑到日期型列表转换为向量的麻烦,最好的方法就是不要出现日期型列表,尽量用向量。

关于对
> dateVector <- unlist(dateLst)
> dateVector
[1] 16658

的解释,可以参加下列代码:
> as.Date(16658, origin = "1970-01-01")
[1] "2015-08-11"

看来unlist时默认了一个时间点1970-01-01.
posted @ 2015-08-11 16:01  超仔  阅读(609)  评论(0编辑  收藏  举报