【问题标题】:Why is it that wrapping as.Date() in sapply return a numerical data type, but whereas lapply returns a date data type?为什么在 sapply 中包装 as.Date() 返回数字数据类型,而 lapply 返回日期数据类型?
【发布时间】:2020-04-25 15:56:32
【问题描述】:

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

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

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

【问题讨论】:

  • sapply 做一个 lapply 并“简化”它。请参阅帮助文件。

标签: r lapply sapply as.date


【解决方案1】:

欢迎来到 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> 

(“数字”是日期在内部的表示方式:自纪元 aka 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> 

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多