为什么将 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>
在我工作的地方,我们收到的数据集是字符格式的,因此需要将其更改为适当的数据类型,以便在 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>