在我工作的地方,我们接收到的数据集是以字符为格式的,所以在R中进行任何分析时都需要将其改为合适的数据类型。
但我注意到一个奇怪的事情,就是将包含日期的列从字符转换为日期,在sapply中使用as.Date将列转换为数字,而lapply则将它们转换为所需的日期格式。
我只是好奇为什么会出现这样的行为。
欢迎来到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>