为什么在sapply中包装as.Date()会返回一个数字数据类型,而lapply却返回一个日期数据类型?

问题描述 投票:1回答:1

在我工作的地方,我们接收到的数据集是以字符为格式的,所以在R中进行任何分析时都需要将其改为合适的数据类型。

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

我只是好奇为什么会出现这样的行为。

r lapply sapply as.date
1个回答
0
投票

欢迎来到StackOverflow,很好的问题。

这是由于结果类型的原因。 sapply 返回一个向量和 as.vector() 步骤将类属性剥离。 这是不幸的,但有记录。

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> 

(而 "数字 "是内部表示日期的方式:从1970-01-01开始的天数) 当你做以下操作时,也会得到同样的结果 as.numeric()as.integer(0 上。)

列表具有更丰富的语义,而且 lapply()返回一个列表,不会产生上述的副作用。

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

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

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

R> 
© www.soinside.com 2019 - 2024. All rights reserved.