禁用 mapply 自动将日期转换为数字

chu*_*lor 5 r

我注意到当你这样做时:

mapply(function(x) { x }, c(as.Date('2014-1-1'), as.Date('2014-2-2')))
Run Code Online (Sandbox Code Playgroud)

R 自动将您的日期向量转换为数字向量。有没有办法禁用这种行为?

我知道您可以将结果包装在 as.Date(..., origin='1970-1-1') 中,但我只能想象这里必须有更好的解决方案。

Ric*_*ven 6

这与通过mapply简化其结果的方式有关simplify2array

x <- list(as.Date('2014-1-1'), as.Date('2014-2-2'))
simplify2array(x, higher = FALSE)
# [1] 16071 16103
Run Code Online (Sandbox Code Playgroud)

您可以关闭简化,然后手动减少列表。

do.call(c, mapply(I, x, SIMPLIFY = FALSE))
# [1] "2014-01-01" "2014-02-02"
Run Code Online (Sandbox Code Playgroud)

或者您可以MapReduce(或do.call)一起使用

Reduce(c, Map(I, x))
# [1] "2014-01-01" "2014-02-02"
Run Code Online (Sandbox Code Playgroud)

Map基本上是mapply(..., SIMPLIFY = FALSE),我使用I代替,function(x) { x }因为它只是按原样返回其输入。