R 列中的最大日期与 sapply

Max date in R column with sapply

我正在尝试使用 sapply 获取列中的最大日期,但它返回的是数字而不是日期。知道如何解决这个问题吗?我似乎无法弄清楚为什么会这样..

 mtcars$datecolm = '2015-03-03'
 mtcars$datecolm[1] = '2015-09-09'
  mtcars$datecolm = as.Date(mtcars$datecolm)

    sapply(mtcars, max)   # why is it returning a number instead of a date??
    max(mtcars$datecolm)   # works correctly

鉴于我的设置方式,请使用 sapply...我知道这适用于 apply(mtcars,2,max)。

我们需要使用 lapply 而不是 sapply

lapply(mtcars, max)

as sapply returns a vector 因为 simplify=TRUE 默认参数和 vector 只能容纳一个 class。由于有数字列,'Date' 列(存储为整数)被强制为 integer 值。但是,如果我们使用simplify = FALSE到return一个list.

,我们仍然可以使用sapply
sapply(mtcars, max, simplify = FALSE)

关于apply

的使用
apply(mtcars,2,max)

我不建议使用 apply,因为这会转换为矩阵,而矩阵只能容纳一个 class。在这里,当 'Date' class 转换为 character.

时,将全部输出 character

关于OP在评论中提到的问题,当我们有属于不同class的输出时,我们可以使用listdata.frame(因为data.frame 是一个 list) 作为 c 即连接 returns 一个 vector 如上所述,它只能容纳一个 class.

do.call(rbind, lapply(mtcars, function(x) 
          data.frame(Class=class(x), Max=max(x, na.rm=TRUE))))