为什么将 as.Date() 包装在 sapply return 中是一种数字数据类型,而 lapply returns 是一种日期数据类型?

Why is it that wrapping as.Date() in sapply return a numerical data type, but whereas lapply returns a date data type?

在我工作的地方,我们收到的数据集是字符格式的,因此需要将其更改为适当的数据类型,以便在 R 中进行任何分析。

但我注意到一件奇怪的事情是,在 sapply 中使用 as.Date 将包含日期的列从字符转换为日期,将列转换为数字,而 lapply 将它们转换为所需的日期格式。

我只是好奇为什么会发生这种行为。

欢迎来到 Whosebug,这是一个很好的问题。

这是由于结果类型。 sapply returns 向量和 as.vector() 步骤剥离 class 属性。这很不幸,但记录在案:

R> dates <- Sys.Date() + 0:2
R> dates
[1] "2020-04-25" "2020-04-26" "2020-04-27"
R> as.vector(dates)
[1] 18377 18378 18379
R> 

(而 'number' 是内部表示日期的方式:自纪元以来的天数,也就是 1970-01-01。当您执行 as.numeric()as.integer(0 在他们身上。)

列表具有更丰富的语义,lapply(),returns 列表,不会产生上面看到的副作用:

as.list(dates)
[[1]]
[1] "2020-04-25"

[[2]]
[1] "2020-04-26"

[[3]]
[1] "2020-04-27"

R>