我正在尝试使用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)。
答案 0 :(得分:2)
我们需要使用lapply
代替sapply
lapply(mtcars, max)
sapply
因为vector
默认参数而返回simplify=TRUE
,而vector
只能包含一个类。由于存在数字列,“日期”列(存储为整数)会被强制转换为integer
值。但是,如果我们使用sapply
返回simplify = FALSE
,我们仍然可以使用list
。
sapply(mtcars, max, simplify = FALSE)
关于apply
apply(mtcars,2,max)
我不建议使用apply
,因为这将转换为矩阵,矩阵只能容纳一个类。在这里,当'Date'类转换为character
时,它将全部character
输出。
关于OP在评论中提到的问题,当我们有属于不同类的输出时,我们可以使用list
或data.frame
(因为data.frame
是{{1} }})作为list
,即连接返回c
,如上所述,它只能包含一个类。
vector