为什么 apply() 将日期对象转换为数字对象?

Why apply() converts date objects to numeric objects?

为什么 apply() 在调用用户函数之前将我的日期对象转换为数字?

apply(matrix(seq(as.Date("2010-01-01"), as.Date("2010-01-05"), 1)), 1, function(x) { return(class(x)) })
[1] "numeric" "numeric" "numeric" "numeric" "numeric"

为什么 as.Date() 没有默认将 origin 参数设置为“1970-01-01”?

> as.Date(apply(matrix(seq(as.Date("2010-01-01"), as.Date("2010-01-05"), 1)), 1, function(x) { return(x) }))
Error in as.Date.numeric(apply(matrix(seq(as.Date("2010-01-01"), as.Date("2010-01-05"),  : 
  'origin' must be supplied
> as.Date(apply(matrix(seq(as.Date("2010-01-01"), as.Date("2010-01-05"), 1)), 1, function(x) { return(x) }), origin="1970-01-01")
[1] "2010-01-01" "2010-01-02" "2010-01-03" "2010-01-04" "2010-01-05"

基础包中有一个函数 seq.Date,可让您为 Date 对象创建一个序列。但是矩阵仍然只采用原子向量,所以你要么只需要在需要使用日期时再次调用 as.Date(),要么只将它存储在数据框中,因为它可以容纳 "Date" class 值。

至于 as.Date 的默认参数,我认为将 1970 设置为默认值没有意义。如果人们出于任何可能的原因分析该日期之前的数据怎么办?